package org.stragma.symbian.apply.stratego;

import org.strategoxt.stratego_lib.*;
import org.strategoxt.stratego_lib.*;
import org.strategoxt.lang.*;
import org.spoofax.interpreter.terms.*;
import static org.strategoxt.lang.Term.*;
import org.spoofax.interpreter.library.AbstractPrimitive;
import java.util.ArrayList;
import java.lang.ref.WeakReference;

@SuppressWarnings("all") public class Normalise  
{ 
  protected static final boolean TRACES_ENABLED = true;

  protected static ITermFactory constantFactory;

  private static WeakReference<Context> initedContext;

  private static boolean isIniting;

  protected static IStrategoTerm const7;

  protected static IStrategoTerm const6;

  protected static IStrategoTerm const5;

  protected static IStrategoTerm const4;

  protected static IStrategoTerm constMerge_complex_multiply0;

  protected static IStrategoTerm constFalse0;

  protected static IStrategoTerm constTrue0;

  protected static IStrategoTerm constInt2;

  protected static IStrategoTerm constInt1;

  protected static IStrategoTerm const3;

  protected static IStrategoTerm const2;

  protected static IStrategoTerm constInt0;

  protected static IStrategoTerm const1;

  protected static IStrategoTerm const0;

  public static IStrategoConstructor _consConc_2;

  public static IStrategoConstructor _consNone_0;

  public static IStrategoConstructor _consSome_1;

  public static IStrategoConstructor _consTrue_0;

  public static IStrategoConstructor _consFalse_0;

  public static IStrategoConstructor _consNot_1;

  public static IStrategoConstructor _consInt_1;

  public static IStrategoConstructor _consMul_2;

  public static IStrategoConstructor _consDiv_2;

  public static IStrategoConstructor _consMod_2;

  public static IStrategoConstructor _consAdd_2;

  public static IStrategoConstructor _consSub_2;

  public static IStrategoConstructor _consNeg_1;

  public static IStrategoConstructor _consLt_2;

  public static IStrategoConstructor _consGt_2;

  public static IStrategoConstructor _consLeq_2;

  public static IStrategoConstructor _consGeq_2;

  public static IStrategoConstructor _consEqu_2;

  public static IStrategoConstructor _consNeq_2;

  public static IStrategoConstructor _consAnd_2;

  public static IStrategoConstructor _consOr_2;

  public static IStrategoConstructor _consKnown_1;

  public static IStrategoConstructor _consIfElseExp_3;

  public static IStrategoConstructor _consVar_1;

  public static IStrategoConstructor _consMerge_complex_multiply_0;

  public static Context init(Context context)
  { 
    synchronized(Normalise.class)
    { 
      if(isIniting)
        return null;
      try
      { 
        isIniting = true;
        ITermFactory termFactory = context.getFactory();
        if(constantFactory == null)
        { 
          initConstructors(termFactory);
          initConstants(termFactory);
        }
        if(initedContext == null || initedContext.get() != context)
        { 
          org.strategoxt.stratego_lib.Main.init(context);
          org.strategoxt.stratego_lib.Main.init(context);
          context.registerComponent("Normalise");
        }
        initedContext = new WeakReference<Context>(context);
        constantFactory = termFactory;
      }
      finally
      { 
        isIniting = false;
      }
      return context;
    }
  }

  public static Context init()
  { 
    return init(new Context());
  }

  public static void main(String args[])
  { 
    Context context = init();
    context.setStandAlone(true);
    try
    { 
      IStrategoTerm result;
      try
      { 
        result = context.invokeStrategyCLI(io_$Normalise_0_0.instance, "Normalise", args);
      }
      finally
      { 
        context.getIOAgent().closeAllFiles();
      }
      if(result == null)
      { 
        System.err.println("Normalise" + (TRACES_ENABLED ? ": rewriting failed, trace:" : ": rewriting failed"));
        context.printStackTrace();
        context.setStandAlone(false);
        System.exit(1);
      }
      else
      { 
        //System.out.println(result);
        context.setStandAlone(false);
        System.exit(0);
      }
    }
    catch(StrategoExit exit)
    { 
      context.setStandAlone(false);
      //System.exit(exit.getValue());
    }
  }

  public static IStrategoTerm mainNoExit(String ... args) throws StrategoExit
  { 
    return mainNoExit(new Context(), args);
  }

  public static IStrategoTerm mainNoExit(Context context, String ... args) throws StrategoExit
  { 
    try
    { 
      init(context);
      return context.invokeStrategyCLI(io_$Normalise_0_0.instance, "Normalise", args);
    }
    finally
    { 
      context.getIOAgent().closeAllFiles();
    }
  }

  public static Strategy getMainStrategy()
  { 
    return io_$Normalise_0_0.instance;
  }

  public static void initConstructors(ITermFactory termFactory)
  { 
    _consConc_2 = termFactory.makeConstructor("Conc", 2);
    _consNone_0 = termFactory.makeConstructor("None", 0);
    _consSome_1 = termFactory.makeConstructor("Some", 1);
    _consTrue_0 = termFactory.makeConstructor("True", 0);
    _consFalse_0 = termFactory.makeConstructor("False", 0);
    _consNot_1 = termFactory.makeConstructor("Not", 1);
    _consInt_1 = termFactory.makeConstructor("Int", 1);
    _consMul_2 = termFactory.makeConstructor("Mul", 2);
    _consDiv_2 = termFactory.makeConstructor("Div", 2);
    _consMod_2 = termFactory.makeConstructor("Mod", 2);
    _consAdd_2 = termFactory.makeConstructor("Add", 2);
    _consSub_2 = termFactory.makeConstructor("Sub", 2);
    _consNeg_1 = termFactory.makeConstructor("Neg", 1);
    _consLt_2 = termFactory.makeConstructor("Lt", 2);
    _consGt_2 = termFactory.makeConstructor("Gt", 2);
    _consLeq_2 = termFactory.makeConstructor("Leq", 2);
    _consGeq_2 = termFactory.makeConstructor("Geq", 2);
    _consEqu_2 = termFactory.makeConstructor("Equ", 2);
    _consNeq_2 = termFactory.makeConstructor("Neq", 2);
    _consAnd_2 = termFactory.makeConstructor("And", 2);
    _consOr_2 = termFactory.makeConstructor("Or", 2);
    _consKnown_1 = termFactory.makeConstructor("Known", 1);
    _consIfElseExp_3 = termFactory.makeConstructor("IfElseExp", 3);
    _consVar_1 = termFactory.makeConstructor("Var", 1);
    _consMerge_complex_multiply_0 = termFactory.makeConstructor("Merge-complex-multiply", 0);
  }

  public static void initConstants(ITermFactory termFactory)
  { 
    const0 = termFactory.makeString("get-option: ");
    const1 = termFactory.makeString("-1");
    constInt0 = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{Normalise.const1});
    const2 = termFactory.makeString("0");
    const3 = termFactory.makeString("1");
    constInt1 = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{Normalise.const3});
    constInt2 = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{Normalise.const2});
    constTrue0 = termFactory.makeAppl(Normalise._consTrue_0, NO_TERMS);
    constFalse0 = termFactory.makeAppl(Normalise._consFalse_0, NO_TERMS);
    constMerge_complex_multiply0 = termFactory.makeAppl(Normalise._consMerge_complex_multiply_0, NO_TERMS);
    const4 = termFactory.makeString("2");
    const5 = termFactory.makeString("3");
    const6 = termFactory.makeString("4");
    const7 = termFactory.makeString("5");
  }

  @SuppressWarnings("all") public static class get_option_0_1 extends Strategy 
  { 
    public static get_option_0_1 instance = new get_option_0_1();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, IStrategoTerm m_6)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("get_option_0_1");
      Fail0:
      { 
        IStrategoTerm n_6 = null;
        IStrategoTerm o_6 = null;
        o_6 = term;
        term = try_1_0.instance.invoke(context, m_6, get_config_0_0.instance);
        if(term == null)
          break Fail0;
        n_6 = term;
        term = termFactory.makeTuple(Normalise.const0, termFactory.makeTuple(m_6, n_6));
        term = debug_options_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail0;
        term = get_config_0_0.instance.invoke(context, m_6);
        if(term == null)
          break Fail0;
        term = o_6;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class debug_options_0_0 extends Strategy 
  { 
    public static debug_options_0_0 instance = new debug_options_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail1:
      { 
        if(true)
          return term;
      }
      context.push("debug_options_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class minstring_0_0 extends Strategy 
  { 
    public static minstring_0_0 instance = new minstring_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("minstring_0_0");
      Fail2:
      { 
        IStrategoTerm k_8 = null;
        IStrategoTerm l_8 = null;
        if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
          break Fail2;
        k_8 = term.getSubterm(0);
        l_8 = term.getSubterm(1);
        Success0:
        { 
          Fail3:
          { 
            IStrategoTerm m_8 = null;
            m_8 = term;
            term = termFactory.makeTuple(k_8, l_8);
            term = leq$S_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail3;
            term = m_8;
            { 
              term = k_8;
              if(true)
                break Success0;
            }
          }
          term = l_8;
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class maxstring_0_0 extends Strategy 
  { 
    public static maxstring_0_0 instance = new maxstring_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("maxstring_0_0");
      Fail4:
      { 
        IStrategoTerm n_8 = null;
        IStrategoTerm o_8 = null;
        if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
          break Fail4;
        n_8 = term.getSubterm(0);
        o_8 = term.getSubterm(1);
        Success1:
        { 
          Fail5:
          { 
            IStrategoTerm p_8 = null;
            p_8 = term;
            term = termFactory.makeTuple(n_8, o_8);
            term = geq$S_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail5;
            term = p_8;
            { 
              term = n_8;
              if(true)
                break Success1;
            }
          }
          term = o_8;
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class io_$Normalise_0_0 extends Strategy 
  { 
    public static io_$Normalise_0_0 instance = new io_$Normalise_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("io_Normalise_0_0");
      Fail6:
      { 
        term = io_wrap_1_0.instance.invoke(context, term, normalise_0_0.instance);
        if(term == null)
          break Fail6;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class normalise_0_0 extends Strategy 
  { 
    public static normalise_0_0 instance = new normalise_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("normalise_0_0");
      Fail7:
      { 
        term = canonical_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail7;
        term = grouped_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail7;
        term = eliminate_mul_1_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail7;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class canonical_0_0 extends Strategy 
  { 
    public static canonical_0_0 instance = new canonical_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("canonical_0_0");
      Fail8:
      { 
        s_198 s_1981 = new s_198();
        s_198 s_1980 = new s_198();
        s_1980.s_198 = s_1981;
        s_1981.s_198 = s_1981;
        term = q_198.instance.invoke(context, term, s_1980);
        if(term == null)
          break Fail8;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class grouped_0_0 extends Strategy 
  { 
    public static grouped_0_0 instance = new grouped_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("grouped_0_0");
      Fail9:
      { 
        term = j_199.instance.invoke(context, term, k_199.instance);
        if(term == null)
          break Fail9;
        term = p_200.instance.invoke(context, term, q_200.instance);
        if(term == null)
          break Fail9;
        term = w_201.instance.invoke(context, term, x_201.instance);
        if(term == null)
          break Fail9;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class g_202 extends Strategy 
  { 
    public static g_202 instance = new g_202();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail10:
      { 
        IStrategoTerm term172 = term;
        Success2:
        { 
          Fail11:
          { 
            IStrategoTerm term173 = term;
            IStrategoConstructor cons0 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success3:
            { 
              if(cons0 == Normalise._consMul_2)
              { 
                Fail12:
                { 
                  IStrategoTerm d_202 = null;
                  d_202 = term.getSubterm(0);
                  IStrategoTerm arg365 = term.getSubterm(1);
                  if(arg365.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg365).getConstructor())
                    break Fail12;
                  IStrategoTerm arg366 = arg365.getSubterm(0);
                  if(arg366.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)arg366).stringValue()))
                    break Fail12;
                  term = d_202;
                  if(true)
                    break Success3;
                }
                term = term173;
              }
              if(cons0 == Normalise._consMul_2)
              { 
                IStrategoTerm e_202 = null;
                e_202 = term.getSubterm(0);
                IStrategoTerm arg367 = term.getSubterm(1);
                if(arg367.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg367).getConstructor())
                  break Fail11;
                IStrategoTerm arg368 = arg367.getSubterm(0);
                if(arg368.getTermType() != IStrategoTerm.STRING || !"-1".equals(((IStrategoString)arg368).stringValue()))
                  break Fail11;
                term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{e_202});
              }
              else
              { 
                break Fail11;
              }
            }
            if(true)
              break Success2;
          }
          term = term172;
        }
        if(true)
          return term;
      }
      context.push("g_202");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class eliminate_mul_1_0_0 extends Strategy 
  { 
    public static eliminate_mul_1_0_0 instance = new eliminate_mul_1_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("eliminate_mul_1_0_0");
      Fail13:
      { 
        term = f_202.instance.invoke(context, term, g_202.instance);
        if(term == null)
          break Fail13;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class first_mul_0_0 extends Strategy 
  { 
    public static first_mul_0_0 instance = new first_mul_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("first_mul_0_0");
      Fail14:
      { 
        IStrategoTerm d_9 = null;
        IStrategoTerm f_9 = null;
        IStrategoTerm term174 = term;
        IStrategoConstructor cons1 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success4:
        { 
          if(cons1 == Normalise._consAdd_2)
          { 
            Fail15:
            { 
              IStrategoTerm g_9 = null;
              g_9 = term;
              f_9 = term.getSubterm(0);
              term = g_9;
              { 
                term = this.invoke(context, f_9);
                if(term == null)
                  break Fail14;
                if(true)
                  break Success4;
              }
            }
            term = term174;
          }
          Success5:
          { 
            if(cons1 == Normalise._consMul_2)
            { 
              Fail16:
              { 
                IStrategoTerm h_9 = null;
                h_9 = term;
                IStrategoTerm arg369 = term.getSubterm(1);
                if(arg369.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg369).getConstructor())
                  break Fail16;
                d_9 = arg369.getSubterm(0);
                term = h_9;
                { 
                  term = d_9;
                  if(true)
                    break Success5;
                }
              }
              term = term174;
            }
            Success6:
            { 
              if(cons1 == Normalise._consDiv_2)
              { 
                Fail17:
                { 
                  IStrategoTerm i_9 = null;
                  i_9 = term;
                  f_9 = term.getSubterm(0);
                  term = i_9;
                  { 
                    term = this.invoke(context, f_9);
                    if(term == null)
                      break Fail14;
                    if(true)
                      break Success6;
                  }
                }
                term = term174;
              }
              term = Normalise.const3;
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Push$Down$Not_0_0 extends Strategy 
  { 
    public static $Push$Down$Not_0_0 instance = new $Push$Down$Not_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail18:
      { 
        IStrategoTerm term177 = term;
        IStrategoConstructor cons2 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success7:
        { 
          if(cons2 == Normalise._consNot_1)
          { 
            Fail19:
            { 
              IStrategoTerm k_10 = null;
              IStrategoTerm l_10 = null;
              IStrategoTerm arg370 = term.getSubterm(0);
              if(arg370.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg370).getConstructor())
                break Fail19;
              k_10 = arg370.getSubterm(0);
              l_10 = arg370.getSubterm(1);
              term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{k_10}), termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{l_10})});
              if(true)
                break Success7;
            }
            term = term177;
          }
          Success8:
          { 
            if(cons2 == Normalise._consNot_1)
            { 
              Fail20:
              { 
                IStrategoTerm i_10 = null;
                IStrategoTerm j_10 = null;
                IStrategoTerm arg371 = term.getSubterm(0);
                if(arg371.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg371).getConstructor())
                  break Fail20;
                i_10 = arg371.getSubterm(0);
                j_10 = arg371.getSubterm(1);
                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{i_10}), termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{j_10})});
                if(true)
                  break Success8;
              }
              term = term177;
            }
            Success9:
            { 
              if(cons2 == Normalise._consNot_1)
              { 
                Fail21:
                { 
                  IStrategoTerm g_10 = null;
                  IStrategoTerm h_10 = null;
                  IStrategoTerm arg372 = term.getSubterm(0);
                  if(arg372.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg372).getConstructor())
                    break Fail21;
                  g_10 = arg372.getSubterm(0);
                  h_10 = arg372.getSubterm(1);
                  term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{g_10, h_10});
                  if(true)
                    break Success9;
                }
                term = term177;
              }
              Success10:
              { 
                if(cons2 == Normalise._consNot_1)
                { 
                  Fail22:
                  { 
                    IStrategoTerm e_10 = null;
                    IStrategoTerm f_10 = null;
                    IStrategoTerm arg373 = term.getSubterm(0);
                    if(arg373.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg373).getConstructor())
                      break Fail22;
                    e_10 = arg373.getSubterm(0);
                    f_10 = arg373.getSubterm(1);
                    term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{e_10, f_10});
                    if(true)
                      break Success10;
                  }
                  term = term177;
                }
                Success11:
                { 
                  if(cons2 == Normalise._consNot_1)
                  { 
                    Fail23:
                    { 
                      IStrategoTerm c_10 = null;
                      IStrategoTerm d_10 = null;
                      IStrategoTerm arg374 = term.getSubterm(0);
                      if(arg374.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg374).getConstructor())
                        break Fail23;
                      c_10 = arg374.getSubterm(0);
                      d_10 = arg374.getSubterm(1);
                      term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{c_10, d_10});
                      if(true)
                        break Success11;
                    }
                    term = term177;
                  }
                  Success12:
                  { 
                    if(cons2 == Normalise._consNot_1)
                    { 
                      Fail24:
                      { 
                        IStrategoTerm a_10 = null;
                        IStrategoTerm b_10 = null;
                        IStrategoTerm arg375 = term.getSubterm(0);
                        if(arg375.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg375).getConstructor())
                          break Fail24;
                        a_10 = arg375.getSubterm(0);
                        b_10 = arg375.getSubterm(1);
                        term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{a_10, b_10});
                        if(true)
                          break Success12;
                      }
                      term = term177;
                    }
                    Success13:
                    { 
                      if(cons2 == Normalise._consNot_1)
                      { 
                        Fail25:
                        { 
                          IStrategoTerm y_9 = null;
                          IStrategoTerm z_9 = null;
                          IStrategoTerm arg376 = term.getSubterm(0);
                          if(arg376.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg376).getConstructor())
                            break Fail25;
                          y_9 = arg376.getSubterm(0);
                          z_9 = arg376.getSubterm(1);
                          term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{y_9, z_9});
                          if(true)
                            break Success13;
                        }
                        term = term177;
                      }
                      if(cons2 == Normalise._consNot_1)
                      { 
                        IStrategoTerm w_9 = null;
                        IStrategoTerm x_9 = null;
                        IStrategoTerm arg377 = term.getSubterm(0);
                        if(arg377.getTermType() != IStrategoTerm.APPL || Normalise._consNeq_2 != ((IStrategoAppl)arg377).getConstructor())
                          break Fail18;
                        w_9 = arg377.getSubterm(0);
                        x_9 = arg377.getSubterm(1);
                        term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{w_9, x_9});
                      }
                      else
                      { 
                        break Fail18;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      context.push("PushDownNot_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eliminate_0_0 extends Strategy 
  { 
    public static $Eliminate_0_0 instance = new $Eliminate_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail26:
      { 
        IStrategoTerm term184 = term;
        IStrategoConstructor cons3 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success14:
        { 
          if(cons3 == Normalise._consSub_2)
          { 
            Fail27:
            { 
              IStrategoTerm n_10 = null;
              IStrategoTerm o_10 = null;
              n_10 = term.getSubterm(0);
              o_10 = term.getSubterm(1);
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{n_10, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{o_10, Normalise.constInt0})});
              if(true)
                break Success14;
            }
            term = term184;
          }
          if(cons3 == Normalise._consNeg_1)
          { 
            IStrategoTerm m_10 = null;
            m_10 = term.getSubterm(0);
            term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{m_10, Normalise.constInt0});
          }
          else
          { 
            break Fail26;
          }
        }
        if(true)
          return term;
      }
      context.push("Eliminate_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Left$Group_0_0 extends Strategy 
  { 
    public static $Left$Group_0_0 instance = new $Left$Group_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail28:
      { 
        IStrategoTerm term185 = term;
        IStrategoConstructor cons4 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success15:
        { 
          if(cons4 == Normalise._consAdd_2)
          { 
            Fail29:
            { 
              IStrategoTerm y_10 = null;
              IStrategoTerm z_10 = null;
              IStrategoTerm a_11 = null;
              y_10 = term.getSubterm(0);
              IStrategoTerm arg378 = term.getSubterm(1);
              if(arg378.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg378).getConstructor())
                break Fail29;
              z_10 = arg378.getSubterm(0);
              a_11 = arg378.getSubterm(1);
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{y_10, z_10}), a_11});
              if(true)
                break Success15;
            }
            term = term185;
          }
          Success16:
          { 
            if(cons4 == Normalise._consMul_2)
            { 
              Fail30:
              { 
                IStrategoTerm v_10 = null;
                IStrategoTerm w_10 = null;
                IStrategoTerm x_10 = null;
                v_10 = term.getSubterm(0);
                IStrategoTerm arg379 = term.getSubterm(1);
                if(arg379.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg379).getConstructor())
                  break Fail30;
                w_10 = arg379.getSubterm(0);
                x_10 = arg379.getSubterm(1);
                term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{v_10, w_10}), x_10});
                if(true)
                  break Success16;
              }
              term = term185;
            }
            Success17:
            { 
              if(cons4 == Normalise._consAnd_2)
              { 
                Fail31:
                { 
                  IStrategoTerm s_10 = null;
                  IStrategoTerm t_10 = null;
                  IStrategoTerm u_10 = null;
                  s_10 = term.getSubterm(0);
                  IStrategoTerm arg380 = term.getSubterm(1);
                  if(arg380.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg380).getConstructor())
                    break Fail31;
                  t_10 = arg380.getSubterm(0);
                  u_10 = arg380.getSubterm(1);
                  term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{s_10, t_10}), u_10});
                  if(true)
                    break Success17;
                }
                term = term185;
              }
              if(cons4 == Normalise._consOr_2)
              { 
                IStrategoTerm p_10 = null;
                IStrategoTerm q_10 = null;
                IStrategoTerm r_10 = null;
                p_10 = term.getSubterm(0);
                IStrategoTerm arg381 = term.getSubterm(1);
                if(arg381.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg381).getConstructor())
                  break Fail28;
                q_10 = arg381.getSubterm(0);
                r_10 = arg381.getSubterm(1);
                term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{p_10, q_10}), r_10});
              }
              else
              { 
                break Fail28;
              }
            }
          }
        }
        if(true)
          return term;
      }
      context.push("LeftGroup_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Sort$Expr_0_0 extends Strategy 
  { 
    public static $Sort$Expr_0_0 instance = new $Sort$Expr_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("SortExpr_0_0");
      Fail32:
      { 
        IStrategoTerm term188 = term;
        IStrategoConstructor cons5 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success18:
        { 
          if(cons5 == Normalise._consAdd_2)
          { 
            Fail33:
            { 
              IStrategoTerm u_16 = null;
              IStrategoTerm v_16 = null;
              IStrategoTerm arg382 = term.getSubterm(0);
              if(arg382.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg382).getConstructor())
                break Fail33;
              v_16 = arg382.getSubterm(0);
              u_16 = term.getSubterm(1);
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{u_16, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{v_16})});
              if(true)
                break Success18;
            }
            term = term188;
          }
          Success19:
          { 
            if(cons5 == Normalise._consAdd_2)
            { 
              Fail34:
              { 
                IStrategoTerm r_16 = null;
                IStrategoTerm s_16 = null;
                IStrategoTerm t_16 = null;
                IStrategoTerm arg383 = term.getSubterm(0);
                if(arg383.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg383).getConstructor())
                  break Fail34;
                r_16 = arg383.getSubterm(0);
                IStrategoTerm arg384 = arg383.getSubterm(1);
                if(arg384.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg384).getConstructor())
                  break Fail34;
                t_16 = arg384.getSubterm(0);
                s_16 = term.getSubterm(1);
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{r_16, s_16}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{t_16})});
                if(true)
                  break Success19;
              }
              term = term188;
            }
            Success20:
            { 
              if(cons5 == Normalise._consMul_2)
              { 
                Fail35:
                { 
                  IStrategoTerm p_16 = null;
                  IStrategoTerm q_16 = null;
                  IStrategoTerm arg385 = term.getSubterm(0);
                  if(arg385.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg385).getConstructor())
                    break Fail35;
                  q_16 = arg385.getSubterm(0);
                  p_16 = term.getSubterm(1);
                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{p_16, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{q_16})});
                  if(true)
                    break Success20;
                }
                term = term188;
              }
              Success21:
              { 
                if(cons5 == Normalise._consMul_2)
                { 
                  Fail36:
                  { 
                    IStrategoTerm m_16 = null;
                    IStrategoTerm n_16 = null;
                    IStrategoTerm o_16 = null;
                    IStrategoTerm arg386 = term.getSubterm(0);
                    if(arg386.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg386).getConstructor())
                      break Fail36;
                    m_16 = arg386.getSubterm(0);
                    IStrategoTerm arg387 = arg386.getSubterm(1);
                    if(arg387.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg387).getConstructor())
                      break Fail36;
                    o_16 = arg387.getSubterm(0);
                    n_16 = term.getSubterm(1);
                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{m_16, n_16}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{o_16})});
                    if(true)
                      break Success21;
                  }
                  term = term188;
                }
                Success22:
                { 
                  if(cons5 == Normalise._consDiv_2)
                  { 
                    Fail37:
                    { 
                      IStrategoTerm j_16 = null;
                      IStrategoTerm k_16 = null;
                      IStrategoTerm l_16 = null;
                      IStrategoTerm arg388 = term.getSubterm(0);
                      if(arg388.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg388).getConstructor())
                        break Fail37;
                      j_16 = arg388.getSubterm(0);
                      IStrategoTerm arg389 = arg388.getSubterm(1);
                      if(arg389.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg389).getConstructor())
                        break Fail37;
                      l_16 = arg389.getSubterm(0);
                      k_16 = term.getSubterm(1);
                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{j_16, k_16}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_16})});
                      if(true)
                        break Success22;
                    }
                    term = term188;
                  }
                  Success23:
                  { 
                    if(cons5 == Normalise._consMul_2)
                    { 
                      Fail38:
                      { 
                        IStrategoTerm g_16 = null;
                        IStrategoTerm h_16 = null;
                        IStrategoTerm i_16 = null;
                        IStrategoTerm arg390 = term.getSubterm(0);
                        if(arg390.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg390).getConstructor())
                          break Fail38;
                        g_16 = arg390.getSubterm(0);
                        h_16 = arg390.getSubterm(1);
                        IStrategoTerm arg391 = term.getSubterm(1);
                        if(arg391.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg391).getConstructor())
                          break Fail38;
                        i_16 = arg391.getSubterm(0);
                        term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{g_16, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_16})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{h_16, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_16})})});
                        if(true)
                          break Success23;
                      }
                      term = term188;
                    }
                    Success24:
                    { 
                      if(cons5 == Normalise._consAdd_2)
                      { 
                        Fail39:
                        { 
                          IStrategoTerm d_16 = null;
                          IStrategoTerm e_16 = null;
                          IStrategoTerm f_16 = null;
                          IStrategoTerm arg392 = term.getSubterm(0);
                          if(arg392.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg392).getConstructor())
                            break Fail39;
                          d_16 = arg392.getSubterm(0);
                          IStrategoTerm arg393 = arg392.getSubterm(1);
                          if(arg393.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg393).getConstructor())
                            break Fail39;
                          e_16 = arg393.getSubterm(0);
                          f_16 = term.getSubterm(1);
                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_16, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{e_16}), Normalise.constInt1})}), f_16});
                          if(true)
                            break Success24;
                        }
                        term = term188;
                      }
                      Success25:
                      { 
                        if(cons5 == Normalise._consAdd_2)
                        { 
                          Fail40:
                          { 
                            IStrategoTerm b_16 = null;
                            IStrategoTerm c_16 = null;
                            b_16 = term.getSubterm(0);
                            IStrategoTerm arg394 = term.getSubterm(1);
                            if(arg394.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg394).getConstructor())
                              break Fail40;
                            c_16 = arg394.getSubterm(0);
                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{b_16, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{c_16}), Normalise.constInt1})});
                            if(true)
                              break Success25;
                          }
                          term = term188;
                        }
                        Success26:
                        { 
                          if(cons5 == Normalise._consAdd_2)
                          { 
                            Fail41:
                            { 
                              IStrategoTerm r_15 = null;
                              IStrategoTerm v_15 = null;
                              IStrategoTerm a_16 = null;
                              v_15 = term.getSubterm(0);
                              r_15 = term.getSubterm(1);
                              term = v_15;
                              IStrategoTerm term197 = term;
                              Success27:
                              { 
                                Fail42:
                                { 
                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                    break Fail42;
                                  { 
                                    if(true)
                                      break Fail41;
                                    if(true)
                                      break Success27;
                                  }
                                }
                                term = term197;
                              }
                              term = v_15;
                              IStrategoTerm term198 = term;
                              Success28:
                              { 
                                Fail43:
                                { 
                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                    break Fail43;
                                  IStrategoTerm arg395 = term.getSubterm(1);
                                  if(arg395.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg395).getConstructor())
                                    break Fail43;
                                  { 
                                    if(true)
                                      break Fail41;
                                    if(true)
                                      break Success28;
                                  }
                                }
                                term = term198;
                              }
                              term = v_15;
                              IStrategoTerm term199 = term;
                              Success29:
                              { 
                                Fail44:
                                { 
                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                                    break Fail44;
                                  { 
                                    if(true)
                                      break Fail41;
                                    if(true)
                                      break Success29;
                                  }
                                }
                                term = term199;
                              }
                              a_16 = term;
                              term = get_option_0_1.instance.invoke(context, a_16, Normalise.constMerge_complex_multiply0);
                              if(term == null)
                                break Fail41;
                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{v_15, Normalise.constInt1}), r_15});
                              if(true)
                                break Success26;
                            }
                            term = term188;
                          }
                          Success30:
                          { 
                            if(cons5 == Normalise._consAdd_2)
                            { 
                              Fail45:
                              { 
                                IStrategoTerm h_15 = null;
                                IStrategoTerm l_15 = null;
                                IStrategoTerm q_15 = null;
                                h_15 = term.getSubterm(0);
                                l_15 = term.getSubterm(1);
                                term = l_15;
                                IStrategoTerm term201 = term;
                                Success31:
                                { 
                                  Fail46:
                                  { 
                                    if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                      break Fail46;
                                    { 
                                      if(true)
                                        break Fail45;
                                      if(true)
                                        break Success31;
                                    }
                                  }
                                  term = term201;
                                }
                                term = l_15;
                                IStrategoTerm term202 = term;
                                Success32:
                                { 
                                  Fail47:
                                  { 
                                    if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                      break Fail47;
                                    IStrategoTerm arg396 = term.getSubterm(1);
                                    if(arg396.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg396).getConstructor())
                                      break Fail47;
                                    { 
                                      if(true)
                                        break Fail45;
                                      if(true)
                                        break Success32;
                                    }
                                  }
                                  term = term202;
                                }
                                term = l_15;
                                IStrategoTerm term203 = term;
                                Success33:
                                { 
                                  Fail48:
                                  { 
                                    if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                                      break Fail48;
                                    { 
                                      if(true)
                                        break Fail45;
                                      if(true)
                                        break Success33;
                                    }
                                  }
                                  term = term203;
                                }
                                q_15 = term;
                                term = get_option_0_1.instance.invoke(context, q_15, Normalise.constMerge_complex_multiply0);
                                if(term == null)
                                  break Fail45;
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{h_15, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{l_15, Normalise.constInt1})});
                                if(true)
                                  break Success30;
                              }
                              term = term188;
                            }
                            Success34:
                            { 
                              if(cons5 == Normalise._consLt_2)
                              { 
                                Fail49:
                                { 
                                  IStrategoTerm f_15 = null;
                                  IStrategoTerm g_15 = null;
                                  IStrategoTerm arg397 = term.getSubterm(0);
                                  if(arg397.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg397).getConstructor())
                                    break Fail49;
                                  g_15 = arg397.getSubterm(0);
                                  f_15 = term.getSubterm(1);
                                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{f_15, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_15})});
                                  if(true)
                                    break Success34;
                                }
                                term = term188;
                              }
                              Success35:
                              { 
                                if(cons5 == Normalise._consLeq_2)
                                { 
                                  Fail50:
                                  { 
                                    IStrategoTerm d_15 = null;
                                    IStrategoTerm e_15 = null;
                                    IStrategoTerm arg398 = term.getSubterm(0);
                                    if(arg398.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg398).getConstructor())
                                      break Fail50;
                                    e_15 = arg398.getSubterm(0);
                                    d_15 = term.getSubterm(1);
                                    term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{d_15, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_15})});
                                    if(true)
                                      break Success35;
                                  }
                                  term = term188;
                                }
                                Success36:
                                { 
                                  if(cons5 == Normalise._consEqu_2)
                                  { 
                                    Fail51:
                                    { 
                                      IStrategoTerm b_15 = null;
                                      IStrategoTerm c_15 = null;
                                      IStrategoTerm arg399 = term.getSubterm(0);
                                      if(arg399.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg399).getConstructor())
                                        break Fail51;
                                      c_15 = arg399.getSubterm(0);
                                      b_15 = term.getSubterm(1);
                                      term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{b_15, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_15})});
                                      if(true)
                                        break Success36;
                                    }
                                    term = term188;
                                  }
                                  Success37:
                                  { 
                                    if(cons5 == Normalise._consGt_2)
                                    { 
                                      Fail52:
                                      { 
                                        IStrategoTerm z_14 = null;
                                        IStrategoTerm a_15 = null;
                                        IStrategoTerm arg400 = term.getSubterm(0);
                                        if(arg400.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg400).getConstructor())
                                          break Fail52;
                                        a_15 = arg400.getSubterm(0);
                                        z_14 = term.getSubterm(1);
                                        term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{z_14, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_15})});
                                        if(true)
                                          break Success37;
                                      }
                                      term = term188;
                                    }
                                    Success38:
                                    { 
                                      if(cons5 == Normalise._consGeq_2)
                                      { 
                                        Fail53:
                                        { 
                                          IStrategoTerm x_14 = null;
                                          IStrategoTerm y_14 = null;
                                          IStrategoTerm arg401 = term.getSubterm(0);
                                          if(arg401.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg401).getConstructor())
                                            break Fail53;
                                          y_14 = arg401.getSubterm(0);
                                          x_14 = term.getSubterm(1);
                                          term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{x_14, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{y_14})});
                                          if(true)
                                            break Success38;
                                        }
                                        term = term188;
                                      }
                                      Success39:
                                      { 
                                        if(cons5 == Normalise._consNeq_2)
                                        { 
                                          Fail54:
                                          { 
                                            IStrategoTerm v_14 = null;
                                            IStrategoTerm w_14 = null;
                                            IStrategoTerm arg402 = term.getSubterm(0);
                                            if(arg402.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg402).getConstructor())
                                              break Fail54;
                                            w_14 = arg402.getSubterm(0);
                                            v_14 = term.getSubterm(1);
                                            term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{v_14, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{w_14})});
                                            if(true)
                                              break Success39;
                                          }
                                          term = term188;
                                        }
                                        Success40:
                                        { 
                                          if(cons5 == Normalise._consLt_2)
                                          { 
                                            Fail55:
                                            { 
                                              IStrategoTerm s_14 = null;
                                              IStrategoTerm t_14 = null;
                                              IStrategoTerm u_14 = null;
                                              IStrategoTerm arg403 = term.getSubterm(0);
                                              if(arg403.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg403).getConstructor())
                                                break Fail55;
                                              s_14 = arg403.getSubterm(0);
                                              IStrategoTerm arg404 = arg403.getSubterm(1);
                                              if(arg404.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg404).getConstructor())
                                                break Fail55;
                                              u_14 = arg404.getSubterm(0);
                                              t_14 = term.getSubterm(1);
                                              term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{s_14, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{t_14, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{u_14})})})});
                                              if(true)
                                                break Success40;
                                            }
                                            term = term188;
                                          }
                                          Success41:
                                          { 
                                            if(cons5 == Normalise._consLeq_2)
                                            { 
                                              Fail56:
                                              { 
                                                IStrategoTerm p_14 = null;
                                                IStrategoTerm q_14 = null;
                                                IStrategoTerm r_14 = null;
                                                IStrategoTerm arg405 = term.getSubterm(0);
                                                if(arg405.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg405).getConstructor())
                                                  break Fail56;
                                                p_14 = arg405.getSubterm(0);
                                                IStrategoTerm arg406 = arg405.getSubterm(1);
                                                if(arg406.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg406).getConstructor())
                                                  break Fail56;
                                                r_14 = arg406.getSubterm(0);
                                                q_14 = term.getSubterm(1);
                                                term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{p_14, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{q_14, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{r_14})})})});
                                                if(true)
                                                  break Success41;
                                              }
                                              term = term188;
                                            }
                                            Success42:
                                            { 
                                              if(cons5 == Normalise._consEqu_2)
                                              { 
                                                Fail57:
                                                { 
                                                  IStrategoTerm m_14 = null;
                                                  IStrategoTerm n_14 = null;
                                                  IStrategoTerm o_14 = null;
                                                  IStrategoTerm arg407 = term.getSubterm(0);
                                                  if(arg407.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg407).getConstructor())
                                                    break Fail57;
                                                  m_14 = arg407.getSubterm(0);
                                                  IStrategoTerm arg408 = arg407.getSubterm(1);
                                                  if(arg408.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg408).getConstructor())
                                                    break Fail57;
                                                  o_14 = arg408.getSubterm(0);
                                                  n_14 = term.getSubterm(1);
                                                  term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{m_14, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{n_14, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{o_14})})})});
                                                  if(true)
                                                    break Success42;
                                                }
                                                term = term188;
                                              }
                                              Success43:
                                              { 
                                                if(cons5 == Normalise._consGt_2)
                                                { 
                                                  Fail58:
                                                  { 
                                                    IStrategoTerm y_13 = null;
                                                    IStrategoTerm k_14 = null;
                                                    IStrategoTerm l_14 = null;
                                                    IStrategoTerm arg409 = term.getSubterm(0);
                                                    if(arg409.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg409).getConstructor())
                                                      break Fail58;
                                                    y_13 = arg409.getSubterm(0);
                                                    IStrategoTerm arg410 = arg409.getSubterm(1);
                                                    if(arg410.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg410).getConstructor())
                                                      break Fail58;
                                                    l_14 = arg410.getSubterm(0);
                                                    k_14 = term.getSubterm(1);
                                                    term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{y_13, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{k_14, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_14})})})});
                                                    if(true)
                                                      break Success43;
                                                  }
                                                  term = term188;
                                                }
                                                Success44:
                                                { 
                                                  if(cons5 == Normalise._consGeq_2)
                                                  { 
                                                    Fail59:
                                                    { 
                                                      IStrategoTerm v_13 = null;
                                                      IStrategoTerm w_13 = null;
                                                      IStrategoTerm x_13 = null;
                                                      IStrategoTerm arg411 = term.getSubterm(0);
                                                      if(arg411.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg411).getConstructor())
                                                        break Fail59;
                                                      v_13 = arg411.getSubterm(0);
                                                      IStrategoTerm arg412 = arg411.getSubterm(1);
                                                      if(arg412.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg412).getConstructor())
                                                        break Fail59;
                                                      x_13 = arg412.getSubterm(0);
                                                      w_13 = term.getSubterm(1);
                                                      term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{v_13, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{w_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{x_13})})})});
                                                      if(true)
                                                        break Success44;
                                                    }
                                                    term = term188;
                                                  }
                                                  Success45:
                                                  { 
                                                    if(cons5 == Normalise._consNeq_2)
                                                    { 
                                                      Fail60:
                                                      { 
                                                        IStrategoTerm s_13 = null;
                                                        IStrategoTerm t_13 = null;
                                                        IStrategoTerm u_13 = null;
                                                        IStrategoTerm arg413 = term.getSubterm(0);
                                                        if(arg413.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg413).getConstructor())
                                                          break Fail60;
                                                        s_13 = arg413.getSubterm(0);
                                                        IStrategoTerm arg414 = arg413.getSubterm(1);
                                                        if(arg414.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg414).getConstructor())
                                                          break Fail60;
                                                        u_13 = arg414.getSubterm(0);
                                                        t_13 = term.getSubterm(1);
                                                        term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{s_13, termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{t_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{u_13})})})});
                                                        if(true)
                                                          break Success45;
                                                      }
                                                      term = term188;
                                                    }
                                                    Success46:
                                                    { 
                                                      if(cons5 == Normalise._consLt_2)
                                                      { 
                                                        Fail61:
                                                        { 
                                                          IStrategoTerm p_13 = null;
                                                          IStrategoTerm q_13 = null;
                                                          IStrategoTerm r_13 = null;
                                                          p_13 = term.getSubterm(0);
                                                          IStrategoTerm arg415 = term.getSubterm(1);
                                                          if(arg415.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg415).getConstructor())
                                                            break Fail61;
                                                          q_13 = arg415.getSubterm(0);
                                                          r_13 = arg415.getSubterm(1);
                                                          term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{p_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{q_13})}), r_13});
                                                          if(true)
                                                            break Success46;
                                                        }
                                                        term = term188;
                                                      }
                                                      Success47:
                                                      { 
                                                        if(cons5 == Normalise._consLeq_2)
                                                        { 
                                                          Fail62:
                                                          { 
                                                            IStrategoTerm m_13 = null;
                                                            IStrategoTerm n_13 = null;
                                                            IStrategoTerm o_13 = null;
                                                            m_13 = term.getSubterm(0);
                                                            IStrategoTerm arg416 = term.getSubterm(1);
                                                            if(arg416.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg416).getConstructor())
                                                              break Fail62;
                                                            n_13 = arg416.getSubterm(0);
                                                            o_13 = arg416.getSubterm(1);
                                                            term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{m_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{n_13})}), o_13});
                                                            if(true)
                                                              break Success47;
                                                          }
                                                          term = term188;
                                                        }
                                                        Success48:
                                                        { 
                                                          if(cons5 == Normalise._consEqu_2)
                                                          { 
                                                            Fail63:
                                                            { 
                                                              IStrategoTerm j_13 = null;
                                                              IStrategoTerm k_13 = null;
                                                              IStrategoTerm l_13 = null;
                                                              j_13 = term.getSubterm(0);
                                                              IStrategoTerm arg417 = term.getSubterm(1);
                                                              if(arg417.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg417).getConstructor())
                                                                break Fail63;
                                                              k_13 = arg417.getSubterm(0);
                                                              l_13 = arg417.getSubterm(1);
                                                              term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{j_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{k_13})}), l_13});
                                                              if(true)
                                                                break Success48;
                                                            }
                                                            term = term188;
                                                          }
                                                          Success49:
                                                          { 
                                                            if(cons5 == Normalise._consGt_2)
                                                            { 
                                                              Fail64:
                                                              { 
                                                                IStrategoTerm g_13 = null;
                                                                IStrategoTerm h_13 = null;
                                                                IStrategoTerm i_13 = null;
                                                                g_13 = term.getSubterm(0);
                                                                IStrategoTerm arg418 = term.getSubterm(1);
                                                                if(arg418.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg418).getConstructor())
                                                                  break Fail64;
                                                                h_13 = arg418.getSubterm(0);
                                                                i_13 = arg418.getSubterm(1);
                                                                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{g_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{h_13})}), i_13});
                                                                if(true)
                                                                  break Success49;
                                                              }
                                                              term = term188;
                                                            }
                                                            Success50:
                                                            { 
                                                              if(cons5 == Normalise._consGeq_2)
                                                              { 
                                                                Fail65:
                                                                { 
                                                                  IStrategoTerm d_13 = null;
                                                                  IStrategoTerm e_13 = null;
                                                                  IStrategoTerm f_13 = null;
                                                                  d_13 = term.getSubterm(0);
                                                                  IStrategoTerm arg419 = term.getSubterm(1);
                                                                  if(arg419.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg419).getConstructor())
                                                                    break Fail65;
                                                                  e_13 = arg419.getSubterm(0);
                                                                  f_13 = arg419.getSubterm(1);
                                                                  term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{e_13})}), f_13});
                                                                  if(true)
                                                                    break Success50;
                                                                }
                                                                term = term188;
                                                              }
                                                              Success51:
                                                              { 
                                                                if(cons5 == Normalise._consNeq_2)
                                                                { 
                                                                  Fail66:
                                                                  { 
                                                                    IStrategoTerm a_13 = null;
                                                                    IStrategoTerm b_13 = null;
                                                                    IStrategoTerm c_13 = null;
                                                                    a_13 = term.getSubterm(0);
                                                                    IStrategoTerm arg420 = term.getSubterm(1);
                                                                    if(arg420.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg420).getConstructor())
                                                                      break Fail66;
                                                                    b_13 = arg420.getSubterm(0);
                                                                    c_13 = arg420.getSubterm(1);
                                                                    term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{a_13, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{b_13})}), c_13});
                                                                    if(true)
                                                                      break Success51;
                                                                  }
                                                                  term = term188;
                                                                }
                                                                Success52:
                                                                { 
                                                                  if(cons5 == Normalise._consLt_2)
                                                                  { 
                                                                    Fail67:
                                                                    { 
                                                                      IStrategoTerm w_12 = null;
                                                                      IStrategoTerm x_12 = null;
                                                                      w_12 = term.getSubterm(0);
                                                                      x_12 = term.getSubterm(1);
                                                                      term = x_12;
                                                                      IStrategoTerm term223 = term;
                                                                      Success53:
                                                                      { 
                                                                        Fail68:
                                                                        { 
                                                                          if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                            break Fail68;
                                                                          { 
                                                                            if(true)
                                                                              break Fail67;
                                                                            if(true)
                                                                              break Success53;
                                                                          }
                                                                        }
                                                                        term = term223;
                                                                      }
                                                                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{w_12, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{x_12})}), Normalise.constInt2});
                                                                      if(true)
                                                                        break Success52;
                                                                    }
                                                                    term = term188;
                                                                  }
                                                                  Success54:
                                                                  { 
                                                                    if(cons5 == Normalise._consLeq_2)
                                                                    { 
                                                                      Fail69:
                                                                      { 
                                                                        IStrategoTerm q_12 = null;
                                                                        IStrategoTerm r_12 = null;
                                                                        q_12 = term.getSubterm(0);
                                                                        r_12 = term.getSubterm(1);
                                                                        term = r_12;
                                                                        IStrategoTerm term225 = term;
                                                                        Success55:
                                                                        { 
                                                                          Fail70:
                                                                          { 
                                                                            if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                              break Fail70;
                                                                            { 
                                                                              if(true)
                                                                                break Fail69;
                                                                              if(true)
                                                                                break Success55;
                                                                            }
                                                                          }
                                                                          term = term225;
                                                                        }
                                                                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{q_12, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{r_12})}), Normalise.constInt2});
                                                                        if(true)
                                                                          break Success54;
                                                                      }
                                                                      term = term188;
                                                                    }
                                                                    Success56:
                                                                    { 
                                                                      if(cons5 == Normalise._consEqu_2)
                                                                      { 
                                                                        Fail71:
                                                                        { 
                                                                          IStrategoTerm m_12 = null;
                                                                          IStrategoTerm n_12 = null;
                                                                          m_12 = term.getSubterm(0);
                                                                          n_12 = term.getSubterm(1);
                                                                          term = n_12;
                                                                          IStrategoTerm term227 = term;
                                                                          Success57:
                                                                          { 
                                                                            Fail72:
                                                                            { 
                                                                              if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                                break Fail72;
                                                                              { 
                                                                                if(true)
                                                                                  break Fail71;
                                                                                if(true)
                                                                                  break Success57;
                                                                              }
                                                                            }
                                                                            term = term227;
                                                                          }
                                                                          term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{m_12, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{n_12})}), Normalise.constInt2});
                                                                          if(true)
                                                                            break Success56;
                                                                        }
                                                                        term = term188;
                                                                      }
                                                                      Success58:
                                                                      { 
                                                                        if(cons5 == Normalise._consGt_2)
                                                                        { 
                                                                          Fail73:
                                                                          { 
                                                                            IStrategoTerm m_11 = null;
                                                                            IStrategoTerm n_11 = null;
                                                                            m_11 = term.getSubterm(0);
                                                                            n_11 = term.getSubterm(1);
                                                                            term = n_11;
                                                                            IStrategoTerm term229 = term;
                                                                            Success59:
                                                                            { 
                                                                              Fail74:
                                                                              { 
                                                                                if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                                  break Fail74;
                                                                                { 
                                                                                  if(true)
                                                                                    break Fail73;
                                                                                  if(true)
                                                                                    break Success59;
                                                                                }
                                                                              }
                                                                              term = term229;
                                                                            }
                                                                            term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{m_11, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{n_11})}), Normalise.constInt2});
                                                                            if(true)
                                                                              break Success58;
                                                                          }
                                                                          term = term188;
                                                                        }
                                                                        Success60:
                                                                        { 
                                                                          if(cons5 == Normalise._consGeq_2)
                                                                          { 
                                                                            Fail75:
                                                                            { 
                                                                              IStrategoTerm g_11 = null;
                                                                              IStrategoTerm h_11 = null;
                                                                              g_11 = term.getSubterm(0);
                                                                              h_11 = term.getSubterm(1);
                                                                              term = h_11;
                                                                              IStrategoTerm term231 = term;
                                                                              Success61:
                                                                              { 
                                                                                Fail76:
                                                                                { 
                                                                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                                    break Fail76;
                                                                                  { 
                                                                                    if(true)
                                                                                      break Fail75;
                                                                                    if(true)
                                                                                      break Success61;
                                                                                  }
                                                                                }
                                                                                term = term231;
                                                                              }
                                                                              term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{g_11, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{h_11})}), Normalise.constInt2});
                                                                              if(true)
                                                                                break Success60;
                                                                            }
                                                                            term = term188;
                                                                          }
                                                                          if(cons5 == Normalise._consNeq_2)
                                                                          { 
                                                                            IStrategoTerm b_11 = null;
                                                                            IStrategoTerm c_11 = null;
                                                                            b_11 = term.getSubterm(0);
                                                                            c_11 = term.getSubterm(1);
                                                                            term = c_11;
                                                                            IStrategoTerm term232 = term;
                                                                            Success62:
                                                                            { 
                                                                              Fail77:
                                                                              { 
                                                                                if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                                  break Fail77;
                                                                                { 
                                                                                  if(true)
                                                                                    break Fail32;
                                                                                  if(true)
                                                                                    break Success62;
                                                                                }
                                                                              }
                                                                              term = term232;
                                                                            }
                                                                            term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{b_11, termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{c_11})}), Normalise.constInt2});
                                                                          }
                                                                          else
                                                                          { 
                                                                            break Fail32;
                                                                          }
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Normalise$Compare_0_0 extends Strategy 
  { 
    public static $Normalise$Compare_0_0 instance = new $Normalise$Compare_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("NormaliseCompare_0_0");
      Fail78:
      { 
        IStrategoTerm term233 = term;
        IStrategoConstructor cons18 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success63:
        { 
          if(cons18 == Normalise._consNeq_2)
          { 
            Fail79:
            { 
              IStrategoTerm q_17 = null;
              IStrategoTerm r_17 = null;
              r_17 = term.getSubterm(0);
              IStrategoTerm arg421 = term.getSubterm(1);
              if(arg421.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg421).getConstructor())
                break Fail79;
              q_17 = arg421.getSubterm(0);
              term = first_mul_0_0.instance.invoke(context, r_17);
              if(term == null)
                break Fail79;
              term = termFactory.makeTuple(term, Normalise.const2);
              term = lt$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail79;
              term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{r_17, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{q_17})})});
              if(true)
                break Success63;
            }
            term = term233;
          }
          Success64:
          { 
            if(cons18 == Normalise._consEqu_2)
            { 
              Fail80:
              { 
                IStrategoTerm m_17 = null;
                IStrategoTerm n_17 = null;
                n_17 = term.getSubterm(0);
                IStrategoTerm arg422 = term.getSubterm(1);
                if(arg422.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg422).getConstructor())
                  break Fail80;
                m_17 = arg422.getSubterm(0);
                term = first_mul_0_0.instance.invoke(context, n_17);
                if(term == null)
                  break Fail80;
                term = termFactory.makeTuple(term, Normalise.const2);
                term = lt$S_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail80;
                term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{n_17, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{m_17})})});
                if(true)
                  break Success64;
              }
              term = term233;
            }
            Success65:
            { 
              if(cons18 == Normalise._consLt_2)
              { 
                Fail81:
                { 
                  IStrategoTerm i_17 = null;
                  IStrategoTerm j_17 = null;
                  j_17 = term.getSubterm(0);
                  IStrategoTerm arg423 = term.getSubterm(1);
                  if(arg423.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg423).getConstructor())
                    break Fail81;
                  i_17 = arg423.getSubterm(0);
                  term = first_mul_0_0.instance.invoke(context, j_17);
                  if(term == null)
                    break Fail81;
                  term = termFactory.makeTuple(term, Normalise.const2);
                  term = lt$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail81;
                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{j_17, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_17})})});
                  if(true)
                    break Success65;
                }
                term = term233;
              }
              Success66:
              { 
                if(cons18 == Normalise._consLeq_2)
                { 
                  Fail82:
                  { 
                    IStrategoTerm e_17 = null;
                    IStrategoTerm f_17 = null;
                    f_17 = term.getSubterm(0);
                    IStrategoTerm arg424 = term.getSubterm(1);
                    if(arg424.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg424).getConstructor())
                      break Fail82;
                    e_17 = arg424.getSubterm(0);
                    term = first_mul_0_0.instance.invoke(context, f_17);
                    if(term == null)
                      break Fail82;
                    term = termFactory.makeTuple(term, Normalise.const2);
                    term = lt$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail82;
                    term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{f_17, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_17})})});
                    if(true)
                      break Success66;
                  }
                  term = term233;
                }
                Success67:
                { 
                  if(cons18 == Normalise._consGt_2)
                  { 
                    Fail83:
                    { 
                      IStrategoTerm a_17 = null;
                      IStrategoTerm b_17 = null;
                      b_17 = term.getSubterm(0);
                      IStrategoTerm arg425 = term.getSubterm(1);
                      if(arg425.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg425).getConstructor())
                        break Fail83;
                      a_17 = arg425.getSubterm(0);
                      term = first_mul_0_0.instance.invoke(context, b_17);
                      if(term == null)
                        break Fail83;
                      term = termFactory.makeTuple(term, Normalise.const2);
                      term = lt$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail83;
                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{b_17, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_17})})});
                      if(true)
                        break Success67;
                    }
                    term = term233;
                  }
                  if(cons18 == Normalise._consGeq_2)
                  { 
                    IStrategoTerm w_16 = null;
                    IStrategoTerm x_16 = null;
                    x_16 = term.getSubterm(0);
                    IStrategoTerm arg426 = term.getSubterm(1);
                    if(arg426.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg426).getConstructor())
                      break Fail78;
                    w_16 = arg426.getSubterm(0);
                    term = first_mul_0_0.instance.invoke(context, x_16);
                    if(term == null)
                      break Fail78;
                    term = termFactory.makeTuple(term, Normalise.const2);
                    term = lt$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail78;
                    term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{x_16, Normalise.constInt0}), termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{w_16})})});
                  }
                  else
                  { 
                    break Fail78;
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class variable_name_reorder_0_0 extends Strategy 
  { 
    public static variable_name_reorder_0_0 instance = new variable_name_reorder_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("variable_name_reorder_0_0");
      Fail84:
      { 
        IStrategoTerm term238 = term;
        Success68:
        { 
          Fail85:
          { 
            IStrategoTerm u_17 = null;
            u_17 = term;
            if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
              break Fail85;
            IStrategoTerm arg428 = term.getSubterm(1);
            if(arg428.getTermType() != IStrategoTerm.STRING || !"row".equals(((IStrategoString)arg428).stringValue()))
              break Fail85;
            term = u_17;
            if(true)
              break Success68;
          }
          term = term238;
          IStrategoTerm term239 = term;
          Success69:
          { 
            Fail86:
            { 
              IStrategoTerm v_17 = null;
              v_17 = term;
              if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                break Fail86;
              IStrategoTerm arg429 = term.getSubterm(0);
              if(arg429.getTermType() != IStrategoTerm.STRING || !"row".equals(((IStrategoString)arg429).stringValue()))
                break Fail86;
              term = v_17;
              { 
                if(true)
                  break Fail84;
                if(true)
                  break Success69;
              }
            }
            term = term239;
            IStrategoTerm term240 = term;
            Success70:
            { 
              Fail87:
              { 
                IStrategoTerm w_17 = null;
                w_17 = term;
                if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                  break Fail87;
                IStrategoTerm arg432 = term.getSubterm(1);
                if(arg432.getTermType() != IStrategoTerm.STRING || !"column".equals(((IStrategoString)arg432).stringValue()))
                  break Fail87;
                term = w_17;
                if(true)
                  break Success70;
              }
              term = term240;
              IStrategoTerm term241 = term;
              Success71:
              { 
                Fail88:
                { 
                  IStrategoTerm x_17 = null;
                  x_17 = term;
                  if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                    break Fail88;
                  IStrategoTerm arg433 = term.getSubterm(0);
                  if(arg433.getTermType() != IStrategoTerm.STRING || !"column".equals(((IStrategoString)arg433).stringValue()))
                    break Fail88;
                  term = x_17;
                  { 
                    if(true)
                      break Fail84;
                    if(true)
                      break Success71;
                  }
                }
                term = string_gt_0_0.instance.invoke(context, term241);
                if(term == null)
                  break Fail84;
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Sort$Terms_0_0 extends Strategy 
  { 
    public static $Sort$Terms_0_0 instance = new $Sort$Terms_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("SortTerms_0_0");
      Fail89:
      { 
        IStrategoTerm term242 = term;
        IStrategoConstructor cons19 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success72:
        { 
          if(cons19 == Normalise._consAdd_2)
          { 
            Fail90:
            { 
              IStrategoTerm l_18 = null;
              IStrategoTerm m_18 = null;
              IStrategoTerm n_18 = null;
              IStrategoTerm o_18 = null;
              IStrategoTerm arg435 = term.getSubterm(0);
              if(arg435.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg435).getConstructor())
                break Fail90;
              IStrategoTerm arg436 = arg435.getSubterm(0);
              if(arg436.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg436).getConstructor())
                break Fail90;
              n_18 = arg436.getSubterm(0);
              IStrategoTerm arg437 = arg435.getSubterm(1);
              if(arg437.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg437).getConstructor())
                break Fail90;
              m_18 = arg437.getSubterm(0);
              IStrategoTerm arg438 = term.getSubterm(1);
              if(arg438.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg438).getConstructor())
                break Fail90;
              IStrategoTerm arg439 = arg438.getSubterm(0);
              if(arg439.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg439).getConstructor())
                break Fail90;
              o_18 = arg439.getSubterm(0);
              IStrategoTerm arg440 = arg438.getSubterm(1);
              if(arg440.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg440).getConstructor())
                break Fail90;
              l_18 = arg440.getSubterm(0);
              term = termFactory.makeTuple(n_18, o_18);
              term = variable_name_reorder_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail90;
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{o_18}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_18})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{n_18}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{m_18})})});
              if(true)
                break Success72;
            }
            term = term242;
          }
          Success73:
          { 
            if(cons19 == Normalise._consAdd_2)
            { 
              Fail91:
              { 
                IStrategoTerm f_18 = null;
                IStrategoTerm g_18 = null;
                IStrategoTerm h_18 = null;
                IStrategoTerm i_18 = null;
                IStrategoTerm j_18 = null;
                IStrategoTerm arg441 = term.getSubterm(0);
                if(arg441.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg441).getConstructor())
                  break Fail91;
                f_18 = arg441.getSubterm(0);
                IStrategoTerm arg442 = arg441.getSubterm(1);
                if(arg442.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg442).getConstructor())
                  break Fail91;
                IStrategoTerm arg443 = arg442.getSubterm(0);
                if(arg443.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg443).getConstructor())
                  break Fail91;
                i_18 = arg443.getSubterm(0);
                IStrategoTerm arg444 = arg442.getSubterm(1);
                if(arg444.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg444).getConstructor())
                  break Fail91;
                h_18 = arg444.getSubterm(0);
                IStrategoTerm arg445 = term.getSubterm(1);
                if(arg445.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg445).getConstructor())
                  break Fail91;
                IStrategoTerm arg446 = arg445.getSubterm(0);
                if(arg446.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg446).getConstructor())
                  break Fail91;
                j_18 = arg446.getSubterm(0);
                IStrategoTerm arg447 = arg445.getSubterm(1);
                if(arg447.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg447).getConstructor())
                  break Fail91;
                g_18 = arg447.getSubterm(0);
                term = termFactory.makeTuple(i_18, j_18);
                term = variable_name_reorder_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail91;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{f_18, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{j_18}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_18})})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{i_18}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{h_18})})});
                if(true)
                  break Success73;
              }
              term = term242;
            }
            Success74:
            { 
              if(cons19 == Normalise._consAdd_2)
              { 
                Fail92:
                { 
                  IStrategoTerm c_18 = null;
                  IStrategoTerm d_18 = null;
                  c_18 = term.getSubterm(0);
                  d_18 = term.getSubterm(1);
                  term = c_18;
                  IStrategoTerm term245 = term;
                  Success75:
                  { 
                    Fail93:
                    { 
                      if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                        break Fail93;
                      { 
                        if(true)
                          break Fail92;
                        if(true)
                          break Success75;
                      }
                    }
                    term = term245;
                  }
                  term = c_18;
                  IStrategoTerm term246 = term;
                  Success76:
                  { 
                    Fail94:
                    { 
                      if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                        break Fail94;
                      IStrategoTerm arg450 = term.getSubterm(0);
                      if(arg450.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg450).getConstructor())
                        break Fail94;
                      IStrategoTerm arg452 = term.getSubterm(1);
                      if(arg452.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg452).getConstructor())
                        break Fail94;
                      { 
                        if(true)
                          break Fail92;
                        if(true)
                          break Success76;
                      }
                    }
                    term = term246;
                  }
                  term = d_18;
                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                    break Fail92;
                  IStrategoTerm arg454 = term.getSubterm(0);
                  if(arg454.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg454).getConstructor())
                    break Fail92;
                  IStrategoTerm arg456 = term.getSubterm(1);
                  if(arg456.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg456).getConstructor())
                    break Fail92;
                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_18, c_18});
                  if(true)
                    break Success74;
                }
                term = term242;
              }
              if(cons19 == Normalise._consAdd_2)
              { 
                IStrategoTerm y_17 = null;
                IStrategoTerm z_17 = null;
                IStrategoTerm a_18 = null;
                IStrategoTerm arg458 = term.getSubterm(0);
                if(arg458.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg458).getConstructor())
                  break Fail89;
                y_17 = arg458.getSubterm(0);
                z_17 = arg458.getSubterm(1);
                a_18 = term.getSubterm(1);
                term = z_17;
                IStrategoTerm term247 = term;
                Success77:
                { 
                  Fail95:
                  { 
                    if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                      break Fail95;
                    IStrategoTerm arg459 = term.getSubterm(0);
                    if(arg459.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg459).getConstructor())
                      break Fail95;
                    IStrategoTerm arg461 = term.getSubterm(1);
                    if(arg461.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg461).getConstructor())
                      break Fail95;
                    { 
                      if(true)
                        break Fail89;
                      if(true)
                        break Success77;
                    }
                  }
                  term = term247;
                }
                term = a_18;
                if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                  break Fail89;
                IStrategoTerm arg463 = term.getSubterm(0);
                if(arg463.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg463).getConstructor())
                  break Fail89;
                IStrategoTerm arg465 = term.getSubterm(1);
                if(arg465.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg465).getConstructor())
                  break Fail89;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{y_17, a_18}), z_17});
              }
              else
              { 
                break Fail89;
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class comparison_reorder_0_0 extends Strategy 
  { 
    public static comparison_reorder_0_0 instance = new comparison_reorder_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("comparison_reorder_0_0");
      Fail96:
      { 
        term = comparison_reorder_code_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail96;
        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)term).getConstructor())
          break Fail96;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class comparison_reorder_code_0_0 extends Strategy 
  { 
    public static comparison_reorder_code_0_0 instance = new comparison_reorder_code_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("comparison_reorder_code_0_0");
      Fail97:
      { 
        IStrategoTerm q_18 = null;
        IStrategoTerm r_18 = null;
        IStrategoTerm s_18 = null;
        IStrategoTerm t_18 = null;
        IStrategoTerm u_18 = null;
        IStrategoTerm v_18 = null;
        IStrategoTerm w_18 = null;
        IStrategoTerm x_18 = null;
        IStrategoTerm y_18 = null;
        IStrategoTerm z_18 = null;
        IStrategoTerm a_19 = null;
        IStrategoTerm b_19 = null;
        IStrategoTerm c_19 = null;
        IStrategoTerm d_19 = null;
        IStrategoTerm e_19 = null;
        IStrategoTerm g_19 = null;
        IStrategoTerm h_19 = null;
        IStrategoTerm j_19 = null;
        IStrategoTerm k_19 = null;
        IStrategoTerm m_19 = null;
        IStrategoTerm n_19 = null;
        IStrategoTerm p_19 = null;
        IStrategoTerm q_19 = null;
        IStrategoTerm r_19 = null;
        IStrategoTerm s_19 = null;
        IStrategoTerm t_19 = null;
        IStrategoTerm u_19 = null;
        IStrategoTerm v_19 = null;
        IStrategoTerm w_19 = null;
        IStrategoTerm x_19 = null;
        IStrategoTerm y_19 = null;
        IStrategoTerm z_19 = null;
        IStrategoTerm a_20 = null;
        IStrategoTerm b_20 = null;
        IStrategoTerm c_20 = null;
        c_20 = term;
        b_20 = term;
        term = c_20;
        IStrategoTerm term248 = term;
        Success78:
        { 
          Fail98:
          { 
            IStrategoTerm d_20 = null;
            d_20 = term;
            term = b_20;
            if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
              break Fail98;
            q_18 = term.getSubterm(0);
            if(term.getSubterm(1) != q_18 && !q_18.match(term.getSubterm(1)))
              break Fail98;
            term = d_20;
            { 
              if(true)
                break Fail97;
              if(true)
                break Success78;
            }
          }
          term = term248;
          IStrategoTerm term249 = term;
          Success79:
          { 
            Fail99:
            { 
              IStrategoTerm e_20 = null;
              e_20 = term;
              term = b_20;
              if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                break Fail99;
              IStrategoTerm arg467 = term.getSubterm(0);
              if(arg467.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg467).getConstructor())
                break Fail99;
              IStrategoTerm arg468 = arg467.getSubterm(0);
              if(arg468.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg468).getConstructor())
                break Fail99;
              r_18 = arg468.getSubterm(0);
              IStrategoTerm arg469 = arg467.getSubterm(1);
              if(arg469.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg469).getConstructor())
                break Fail99;
              IStrategoTerm arg471 = term.getSubterm(1);
              if(arg471.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg471).getConstructor())
                break Fail99;
              IStrategoTerm arg472 = arg471.getSubterm(0);
              if(arg472.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg472).getConstructor())
                break Fail99;
              s_18 = arg472.getSubterm(0);
              IStrategoTerm arg473 = arg471.getSubterm(1);
              if(arg473.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg473).getConstructor())
                break Fail99;
              term = e_20;
              { 
                Success80:
                { 
                  Fail100:
                  { 
                    term = termFactory.makeTuple(r_18, s_18);
                    term = variable_name_reorder_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail100;
                    { 
                      term = Normalise.constTrue0;
                      if(true)
                        break Success80;
                    }
                  }
                  term = Normalise.constFalse0;
                }
                if(true)
                  break Success79;
              }
            }
            term = term249;
            IStrategoTerm term251 = term;
            Success81:
            { 
              Fail101:
              { 
                IStrategoTerm f_20 = null;
                f_20 = term;
                term = b_20;
                if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                  break Fail101;
                IStrategoTerm arg475 = term.getSubterm(0);
                if(arg475.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg475).getConstructor())
                  break Fail101;
                t_18 = arg475.getSubterm(0);
                IStrategoTerm arg476 = term.getSubterm(1);
                if(arg476.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg476).getConstructor())
                  break Fail101;
                u_18 = arg476.getSubterm(0);
                term = f_20;
                { 
                  Success82:
                  { 
                    Fail102:
                    { 
                      term = termFactory.makeTuple(t_18, u_18);
                      term = variable_name_reorder_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail102;
                      { 
                        term = Normalise.constTrue0;
                        if(true)
                          break Success82;
                      }
                    }
                    term = Normalise.constFalse0;
                  }
                  if(true)
                    break Success81;
                }
              }
              term = term251;
              IStrategoTerm term253 = term;
              Success83:
              { 
                Fail103:
                { 
                  IStrategoTerm g_20 = null;
                  g_20 = term;
                  term = b_20;
                  if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                    break Fail103;
                  IStrategoTerm arg477 = term.getSubterm(0);
                  if(arg477.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg477).getConstructor())
                    break Fail103;
                  v_18 = arg477.getSubterm(0);
                  x_18 = arg477.getSubterm(1);
                  IStrategoTerm arg478 = term.getSubterm(1);
                  if(arg478.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg478).getConstructor())
                    break Fail103;
                  w_18 = arg478.getSubterm(0);
                  y_18 = arg478.getSubterm(1);
                  term = g_20;
                  { 
                    Success84:
                    { 
                      Fail104:
                      { 
                        term = termFactory.makeTuple(v_18, w_18);
                        term = this.invoke(context, term);
                        if(term == null)
                          break Fail104;
                        if(true)
                          break Success84;
                      }
                      term = termFactory.makeTuple(x_18, y_18);
                      term = this.invoke(context, term);
                      if(term == null)
                        break Fail97;
                    }
                    if(true)
                      break Success83;
                  }
                }
                term = term253;
                IStrategoTerm term255 = term;
                Success85:
                { 
                  Fail105:
                  { 
                    IStrategoTerm h_20 = null;
                    h_20 = term;
                    term = b_20;
                    if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                      break Fail105;
                    IStrategoTerm arg479 = term.getSubterm(0);
                    if(arg479.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg479).getConstructor())
                      break Fail105;
                    z_18 = arg479.getSubterm(0);
                    b_19 = arg479.getSubterm(1);
                    IStrategoTerm arg480 = term.getSubterm(1);
                    if(arg480.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg480).getConstructor())
                      break Fail105;
                    a_19 = arg480.getSubterm(0);
                    c_19 = arg480.getSubterm(1);
                    term = h_20;
                    { 
                      Success86:
                      { 
                        Fail106:
                        { 
                          term = termFactory.makeTuple(z_18, a_19);
                          term = this.invoke(context, term);
                          if(term == null)
                            break Fail106;
                          if(true)
                            break Success86;
                        }
                        term = termFactory.makeTuple(b_19, c_19);
                        term = this.invoke(context, term);
                        if(term == null)
                          break Fail97;
                      }
                      if(true)
                        break Success85;
                    }
                  }
                  term = term255;
                  IStrategoTerm term257 = term;
                  Success87:
                  { 
                    Fail107:
                    { 
                      IStrategoTerm i_20 = null;
                      i_20 = term;
                      term = b_20;
                      if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                        break Fail107;
                      IStrategoTerm arg481 = term.getSubterm(0);
                      if(arg481.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)arg481).getConstructor())
                        break Fail107;
                      d_19 = arg481.getSubterm(0);
                      IStrategoTerm arg482 = term.getSubterm(1);
                      if(arg482.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)arg482).getConstructor())
                        break Fail107;
                      e_19 = arg482.getSubterm(0);
                      term = i_20;
                      { 
                        term = termFactory.makeTuple(d_19, e_19);
                        term = this.invoke(context, term);
                        if(term == null)
                          break Fail97;
                        if(true)
                          break Success87;
                      }
                    }
                    term = term257;
                    IStrategoTerm term258 = term;
                    Success88:
                    { 
                      Fail108:
                      { 
                        IStrategoTerm j_20 = null;
                        j_20 = term;
                        term = b_20;
                        if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                          break Fail108;
                        IStrategoTerm arg483 = term.getSubterm(0);
                        if(arg483.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg483).getConstructor())
                          break Fail108;
                        g_19 = arg483.getSubterm(0);
                        h_19 = term.getSubterm(1);
                        term = j_20;
                        { 
                          Success89:
                          { 
                            Fail109:
                            { 
                              term = termFactory.makeTuple(g_19, h_19);
                              term = this.invoke(context, term);
                              if(term == null)
                                break Fail109;
                              if(true)
                                break Success89;
                            }
                            term = Normalise.constTrue0;
                          }
                          if(true)
                            break Success88;
                        }
                      }
                      term = term258;
                      IStrategoTerm term260 = term;
                      Success90:
                      { 
                        Fail110:
                        { 
                          IStrategoTerm k_20 = null;
                          k_20 = term;
                          term = b_20;
                          if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                            break Fail110;
                          j_19 = term.getSubterm(0);
                          IStrategoTerm arg484 = term.getSubterm(1);
                          if(arg484.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg484).getConstructor())
                            break Fail110;
                          k_19 = arg484.getSubterm(0);
                          term = k_20;
                          { 
                            Success91:
                            { 
                              Fail111:
                              { 
                                term = termFactory.makeTuple(j_19, k_19);
                                term = this.invoke(context, term);
                                if(term == null)
                                  break Fail111;
                                if(true)
                                  break Success91;
                              }
                              term = Normalise.constFalse0;
                            }
                            if(true)
                              break Success90;
                          }
                        }
                        term = term260;
                        IStrategoTerm term262 = term;
                        Success92:
                        { 
                          Fail112:
                          { 
                            IStrategoTerm l_20 = null;
                            l_20 = term;
                            term = b_20;
                            if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                              break Fail112;
                            IStrategoTerm arg485 = term.getSubterm(0);
                            if(arg485.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg485).getConstructor())
                              break Fail112;
                            m_19 = arg485.getSubterm(0);
                            n_19 = term.getSubterm(1);
                            term = l_20;
                            { 
                              Success93:
                              { 
                                Fail113:
                                { 
                                  term = termFactory.makeTuple(m_19, n_19);
                                  term = this.invoke(context, term);
                                  if(term == null)
                                    break Fail113;
                                  if(true)
                                    break Success93;
                                }
                                term = Normalise.constTrue0;
                              }
                              if(true)
                                break Success92;
                            }
                          }
                          term = term262;
                          IStrategoTerm term264 = term;
                          Success94:
                          { 
                            Fail114:
                            { 
                              IStrategoTerm m_20 = null;
                              m_20 = term;
                              term = b_20;
                              if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                break Fail114;
                              p_19 = term.getSubterm(0);
                              IStrategoTerm arg486 = term.getSubterm(1);
                              if(arg486.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg486).getConstructor())
                                break Fail114;
                              q_19 = arg486.getSubterm(0);
                              term = m_20;
                              { 
                                Success95:
                                { 
                                  Fail115:
                                  { 
                                    term = termFactory.makeTuple(p_19, q_19);
                                    term = this.invoke(context, term);
                                    if(term == null)
                                      break Fail115;
                                    if(true)
                                      break Success95;
                                  }
                                  term = Normalise.constFalse0;
                                }
                                if(true)
                                  break Success94;
                              }
                            }
                            term = term264;
                            IStrategoTerm term266 = term;
                            Success96:
                            { 
                              Fail116:
                              { 
                                IStrategoTerm n_20 = null;
                                n_20 = term;
                                term = b_20;
                                if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                  break Fail116;
                                IStrategoTerm arg487 = term.getSubterm(0);
                                if(arg487.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)arg487).getConstructor())
                                  break Fail116;
                                r_19 = arg487.getSubterm(0);
                                s_19 = term.getSubterm(1);
                                term = n_20;
                                { 
                                  Success97:
                                  { 
                                    Fail117:
                                    { 
                                      term = termFactory.makeTuple(r_19, s_19);
                                      term = this.invoke(context, term);
                                      if(term == null)
                                        break Fail117;
                                      if(true)
                                        break Success97;
                                    }
                                    term = Normalise.constTrue0;
                                  }
                                  if(true)
                                    break Success96;
                                }
                              }
                              term = term266;
                              IStrategoTerm term268 = term;
                              Success98:
                              { 
                                Fail118:
                                { 
                                  IStrategoTerm o_20 = null;
                                  o_20 = term;
                                  term = b_20;
                                  if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                    break Fail118;
                                  t_19 = term.getSubterm(0);
                                  IStrategoTerm arg488 = term.getSubterm(1);
                                  if(arg488.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)arg488).getConstructor())
                                    break Fail118;
                                  u_19 = arg488.getSubterm(0);
                                  term = o_20;
                                  { 
                                    Success99:
                                    { 
                                      Fail119:
                                      { 
                                        term = termFactory.makeTuple(t_19, u_19);
                                        term = this.invoke(context, term);
                                        if(term == null)
                                          break Fail119;
                                        if(true)
                                          break Success99;
                                      }
                                      term = Normalise.constFalse0;
                                    }
                                    if(true)
                                      break Success98;
                                  }
                                }
                                term = term268;
                                if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                  break Fail97;
                                v_19 = term.getSubterm(0);
                                a_20 = term.getSubterm(1);
                                Success100:
                                { 
                                  Fail120:
                                  { 
                                    IStrategoTerm p_20 = null;
                                    p_20 = term;
                                    term = is_comparison_0_0.instance.invoke(context, v_19);
                                    if(term == null)
                                      break Fail120;
                                    if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                      break Fail120;
                                    y_19 = term.getSubterm(0);
                                    w_19 = term.getSubterm(1);
                                    term = p_20;
                                    { 
                                      Success101:
                                      { 
                                        Fail121:
                                        { 
                                          IStrategoTerm q_20 = null;
                                          q_20 = term;
                                          term = is_comparison_0_0.instance.invoke(context, a_20);
                                          if(term == null)
                                            break Fail121;
                                          if(term.getTermType() != IStrategoTerm.TUPLE || term.getSubtermCount() != 2)
                                            break Fail121;
                                          z_19 = term.getSubterm(0);
                                          x_19 = term.getSubterm(1);
                                          term = q_20;
                                          { 
                                            IStrategoTerm term272 = term;
                                            Success102:
                                            { 
                                              Fail122:
                                              { 
                                                term = termFactory.makeTuple(w_19, x_19);
                                                term = this.invoke(context, term);
                                                if(term == null)
                                                  break Fail122;
                                                if(true)
                                                  break Success102;
                                              }
                                              term = term272;
                                              Success103:
                                              { 
                                                Fail123:
                                                { 
                                                  term = termFactory.makeTuple(y_19, z_19);
                                                  term = leq$S_0_0.instance.invoke(context, term);
                                                  if(term == null)
                                                    break Fail123;
                                                  { 
                                                    term = Normalise.constFalse0;
                                                    if(true)
                                                      break Success103;
                                                  }
                                                }
                                                term = Normalise.constTrue0;
                                              }
                                            }
                                            if(true)
                                              break Success101;
                                          }
                                        }
                                        term = Normalise.constTrue0;
                                      }
                                      if(true)
                                        break Success100;
                                    }
                                  }
                                  term = is_comparison_0_0.instance.invoke(context, a_20);
                                  if(term == null)
                                    break Fail97;
                                  term = Normalise.constFalse0;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class is_comparison_0_0 extends Strategy 
  { 
    public static is_comparison_0_0 instance = new is_comparison_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail124:
      { 
        IStrategoTerm term274 = term;
        IStrategoConstructor cons23 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success104:
        { 
          if(cons23 == Normalise._consLt_2)
          { 
            Fail125:
            { 
              IStrategoTerm d_21 = null;
              d_21 = term.getSubterm(0);
              IStrategoTerm arg489 = term.getSubterm(1);
              if(arg489.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg489).getConstructor())
                break Fail125;
              term = termFactory.makeTuple(Normalise.const3, d_21);
              if(true)
                break Success104;
            }
            term = term274;
          }
          Success105:
          { 
            if(cons23 == Normalise._consLeq_2)
            { 
              Fail126:
              { 
                IStrategoTerm b_21 = null;
                b_21 = term.getSubterm(0);
                IStrategoTerm arg490 = term.getSubterm(1);
                if(arg490.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg490).getConstructor())
                  break Fail126;
                term = termFactory.makeTuple(Normalise.const4, b_21);
                if(true)
                  break Success105;
              }
              term = term274;
            }
            Success106:
            { 
              if(cons23 == Normalise._consEqu_2)
              { 
                Fail127:
                { 
                  IStrategoTerm z_20 = null;
                  z_20 = term.getSubterm(0);
                  IStrategoTerm arg491 = term.getSubterm(1);
                  if(arg491.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg491).getConstructor())
                    break Fail127;
                  term = termFactory.makeTuple(Normalise.const5, z_20);
                  if(true)
                    break Success106;
                }
                term = term274;
              }
              Success107:
              { 
                if(cons23 == Normalise._consGeq_2)
                { 
                  Fail128:
                  { 
                    IStrategoTerm x_20 = null;
                    x_20 = term.getSubterm(0);
                    IStrategoTerm arg492 = term.getSubterm(1);
                    if(arg492.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg492).getConstructor())
                      break Fail128;
                    term = termFactory.makeTuple(Normalise.const6, x_20);
                    if(true)
                      break Success107;
                  }
                  term = term274;
                }
                Success108:
                { 
                  if(cons23 == Normalise._consGt_2)
                  { 
                    Fail129:
                    { 
                      IStrategoTerm v_20 = null;
                      v_20 = term.getSubterm(0);
                      IStrategoTerm arg493 = term.getSubterm(1);
                      if(arg493.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg493).getConstructor())
                        break Fail129;
                      term = termFactory.makeTuple(Normalise.const7, v_20);
                      if(true)
                        break Success108;
                    }
                    term = term274;
                  }
                  if(cons23 == Normalise._consNeq_2)
                  { 
                    IStrategoTerm t_20 = null;
                    t_20 = term.getSubterm(0);
                    IStrategoTerm arg494 = term.getSubterm(1);
                    if(arg494.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg494).getConstructor())
                      break Fail124;
                    term = termFactory.makeTuple(Normalise.const2, t_20);
                  }
                  else
                  { 
                    break Fail124;
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      context.push("is_comparison_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Sort$Compare_0_0 extends Strategy 
  { 
    public static $Sort$Compare_0_0 instance = new $Sort$Compare_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("SortCompare_0_0");
      Fail130:
      { 
        IStrategoTerm term279 = term;
        IStrategoConstructor cons24 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success109:
        { 
          if(cons24 == Normalise._consAnd_2)
          { 
            Fail131:
            { 
              IStrategoTerm p_21 = null;
              IStrategoTerm q_21 = null;
              p_21 = term.getSubterm(0);
              q_21 = term.getSubterm(1);
              term = termFactory.makeTuple(p_21, q_21);
              term = comparison_reorder_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail131;
              term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{q_21, p_21});
              if(true)
                break Success109;
            }
            term = term279;
          }
          Success110:
          { 
            if(cons24 == Normalise._consAnd_2)
            { 
              Fail132:
              { 
                IStrategoTerm l_21 = null;
                IStrategoTerm m_21 = null;
                IStrategoTerm n_21 = null;
                IStrategoTerm arg495 = term.getSubterm(0);
                if(arg495.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg495).getConstructor())
                  break Fail132;
                l_21 = arg495.getSubterm(0);
                m_21 = arg495.getSubterm(1);
                n_21 = term.getSubterm(1);
                term = termFactory.makeTuple(m_21, n_21);
                term = comparison_reorder_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail132;
                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{l_21, n_21}), m_21});
                if(true)
                  break Success110;
              }
              term = term279;
            }
            Success111:
            { 
              if(cons24 == Normalise._consOr_2)
              { 
                Fail133:
                { 
                  IStrategoTerm i_21 = null;
                  IStrategoTerm j_21 = null;
                  i_21 = term.getSubterm(0);
                  j_21 = term.getSubterm(1);
                  term = termFactory.makeTuple(i_21, j_21);
                  term = comparison_reorder_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail133;
                  term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{j_21, i_21});
                  if(true)
                    break Success111;
                }
                term = term279;
              }
              if(cons24 == Normalise._consOr_2)
              { 
                IStrategoTerm e_21 = null;
                IStrategoTerm f_21 = null;
                IStrategoTerm g_21 = null;
                IStrategoTerm arg496 = term.getSubterm(0);
                if(arg496.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg496).getConstructor())
                  break Fail130;
                e_21 = arg496.getSubterm(0);
                f_21 = arg496.getSubterm(1);
                g_21 = term.getSubterm(1);
                term = termFactory.makeTuple(f_21, g_21);
                term = comparison_reorder_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail130;
                term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{e_21, g_21}), f_21});
              }
              else
              { 
                break Fail130;
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Merge$Compare_0_0_fragment_0 extends Strategy 
  { 
    public static $Merge$Compare_0_0_fragment_0 instance = new $Merge$Compare_0_0_fragment_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("MergeCompare_0_0_fragment_0");
      Fail134:
      { 
        IStrategoTerm term282 = term;
        IStrategoConstructor cons25 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success112:
        { 
          if(cons25 == Normalise._consAnd_2)
          { 
            Fail135:
            { 
              IStrategoTerm j_26 = null;
              IStrategoTerm k_26 = null;
              IStrategoTerm l_26 = null;
              IStrategoTerm m_26 = null;
              IStrategoTerm arg497 = term.getSubterm(0);
              if(arg497.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg497).getConstructor())
                break Fail135;
              j_26 = arg497.getSubterm(0);
              IStrategoTerm arg498 = arg497.getSubterm(1);
              if(arg498.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg498).getConstructor())
                break Fail135;
              k_26 = arg498.getSubterm(0);
              IStrategoTerm arg499 = arg498.getSubterm(1);
              if(arg499.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg499).getConstructor())
                break Fail135;
              l_26 = arg499.getSubterm(0);
              IStrategoTerm arg500 = term.getSubterm(1);
              if(arg500.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg500).getConstructor())
                break Fail135;
              if(arg500.getSubterm(0) != k_26 && !k_26.match(arg500.getSubterm(0)))
                break Fail135;
              IStrategoTerm arg501 = arg500.getSubterm(1);
              if(arg501.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg501).getConstructor())
                break Fail135;
              m_26 = arg501.getSubterm(0);
              term = termFactory.makeTuple(l_26, m_26);
              term = leq$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail135;
              term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{j_26, termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{k_26, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_26})})});
              if(true)
                break Success112;
            }
            term = term282;
          }
          Success113:
          { 
            if(cons25 == Normalise._consAnd_2)
            { 
              Fail136:
              { 
                IStrategoTerm d_26 = null;
                IStrategoTerm e_26 = null;
                IStrategoTerm f_26 = null;
                IStrategoTerm g_26 = null;
                IStrategoTerm arg502 = term.getSubterm(0);
                if(arg502.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg502).getConstructor())
                  break Fail136;
                d_26 = arg502.getSubterm(0);
                IStrategoTerm arg503 = arg502.getSubterm(1);
                if(arg503.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg503).getConstructor())
                  break Fail136;
                e_26 = arg503.getSubterm(0);
                IStrategoTerm arg504 = arg503.getSubterm(1);
                if(arg504.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg504).getConstructor())
                  break Fail136;
                f_26 = arg504.getSubterm(0);
                IStrategoTerm arg505 = term.getSubterm(1);
                if(arg505.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg505).getConstructor())
                  break Fail136;
                if(arg505.getSubterm(0) != e_26 && !e_26.match(arg505.getSubterm(0)))
                  break Fail136;
                IStrategoTerm arg506 = arg505.getSubterm(1);
                if(arg506.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg506).getConstructor())
                  break Fail136;
                g_26 = arg506.getSubterm(0);
                term = termFactory.makeTuple(f_26, g_26);
                term = minstring_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail136;
                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{d_26, termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{e_26, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                if(true)
                  break Success113;
              }
              term = term282;
            }
            Success114:
            { 
              if(cons25 == Normalise._consAnd_2)
              { 
                Fail137:
                { 
                  IStrategoTerm z_25 = null;
                  IStrategoTerm a_26 = null;
                  IStrategoTerm b_26 = null;
                  IStrategoTerm arg507 = term.getSubterm(0);
                  if(arg507.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg507).getConstructor())
                    break Fail137;
                  IStrategoTerm arg508 = arg507.getSubterm(1);
                  if(arg508.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg508).getConstructor())
                    break Fail137;
                  z_25 = arg508.getSubterm(0);
                  IStrategoTerm arg509 = arg508.getSubterm(1);
                  if(arg509.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg509).getConstructor())
                    break Fail137;
                  a_26 = arg509.getSubterm(0);
                  IStrategoTerm arg510 = term.getSubterm(1);
                  if(arg510.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg510).getConstructor())
                    break Fail137;
                  if(arg510.getSubterm(0) != z_25 && !z_25.match(arg510.getSubterm(0)))
                    break Fail137;
                  IStrategoTerm arg511 = arg510.getSubterm(1);
                  if(arg511.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg511).getConstructor())
                    break Fail137;
                  b_26 = arg511.getSubterm(0);
                  term = termFactory.makeTuple(a_26, b_26);
                  IStrategoTerm term285 = term;
                  Success115:
                  { 
                    Fail138:
                    { 
                      term = eq_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail138;
                      { 
                        if(true)
                          break Fail137;
                        if(true)
                          break Success115;
                      }
                    }
                    term = term285;
                  }
                  term = Normalise.constFalse0;
                  if(true)
                    break Success114;
                }
                term = term282;
              }
              Success116:
              { 
                if(cons25 == Normalise._consAnd_2)
                { 
                  Fail139:
                  { 
                    IStrategoTerm v_25 = null;
                    IStrategoTerm w_25 = null;
                    IStrategoTerm x_25 = null;
                    IStrategoTerm arg512 = term.getSubterm(0);
                    if(arg512.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg512).getConstructor())
                      break Fail139;
                    v_25 = arg512.getSubterm(0);
                    IStrategoTerm arg513 = arg512.getSubterm(1);
                    if(arg513.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg513).getConstructor())
                      break Fail139;
                    w_25 = arg513.getSubterm(0);
                    IStrategoTerm arg514 = arg513.getSubterm(1);
                    if(arg514.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg514).getConstructor())
                      break Fail139;
                    x_25 = arg514.getSubterm(0);
                    IStrategoTerm arg515 = term.getSubterm(1);
                    if(arg515.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg515).getConstructor())
                      break Fail139;
                    if(arg515.getSubterm(0) != w_25 && !w_25.match(arg515.getSubterm(0)))
                      break Fail139;
                    IStrategoTerm arg516 = arg515.getSubterm(1);
                    if(arg516.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg516).getConstructor())
                      break Fail139;
                    if(arg516.getSubterm(0) != x_25 && !x_25.match(arg516.getSubterm(0)))
                      break Fail139;
                    term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{v_25, termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{w_25, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{x_25})})});
                    if(true)
                      break Success116;
                  }
                  term = term282;
                }
                Success117:
                { 
                  if(cons25 == Normalise._consAnd_2)
                  { 
                    Fail140:
                    { 
                      IStrategoTerm p_25 = null;
                      IStrategoTerm q_25 = null;
                      IStrategoTerm r_25 = null;
                      IStrategoTerm s_25 = null;
                      IStrategoTerm arg517 = term.getSubterm(0);
                      if(arg517.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg517).getConstructor())
                        break Fail140;
                      p_25 = arg517.getSubterm(0);
                      IStrategoTerm arg518 = arg517.getSubterm(1);
                      if(arg518.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg518).getConstructor())
                        break Fail140;
                      q_25 = arg518.getSubterm(0);
                      IStrategoTerm arg519 = arg518.getSubterm(1);
                      if(arg519.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg519).getConstructor())
                        break Fail140;
                      r_25 = arg519.getSubterm(0);
                      IStrategoTerm arg520 = term.getSubterm(1);
                      if(arg520.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg520).getConstructor())
                        break Fail140;
                      if(arg520.getSubterm(0) != q_25 && !q_25.match(arg520.getSubterm(0)))
                        break Fail140;
                      IStrategoTerm arg521 = arg520.getSubterm(1);
                      if(arg521.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg521).getConstructor())
                        break Fail140;
                      s_25 = arg521.getSubterm(0);
                      term = termFactory.makeTuple(r_25, s_25);
                      term = maxstring_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail140;
                      term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{p_25, termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{q_25, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                      if(true)
                        break Success117;
                    }
                    term = term282;
                  }
                  Success118:
                  { 
                    if(cons25 == Normalise._consAnd_2)
                    { 
                      Fail141:
                      { 
                        IStrategoTerm k_25 = null;
                        IStrategoTerm l_25 = null;
                        IStrategoTerm m_25 = null;
                        IStrategoTerm n_25 = null;
                        IStrategoTerm arg522 = term.getSubterm(0);
                        if(arg522.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg522).getConstructor())
                          break Fail141;
                        k_25 = arg522.getSubterm(0);
                        IStrategoTerm arg523 = arg522.getSubterm(1);
                        if(arg523.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg523).getConstructor())
                          break Fail141;
                        l_25 = arg523.getSubterm(0);
                        IStrategoTerm arg524 = arg523.getSubterm(1);
                        if(arg524.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg524).getConstructor())
                          break Fail141;
                        m_25 = arg524.getSubterm(0);
                        IStrategoTerm arg525 = term.getSubterm(1);
                        if(arg525.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg525).getConstructor())
                          break Fail141;
                        if(arg525.getSubterm(0) != l_25 && !l_25.match(arg525.getSubterm(0)))
                          break Fail141;
                        IStrategoTerm arg526 = arg525.getSubterm(1);
                        if(arg526.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg526).getConstructor())
                          break Fail141;
                        n_25 = arg526.getSubterm(0);
                        term = termFactory.makeTuple(m_25, n_25);
                        term = gt$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail141;
                        term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{k_25, termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{l_25, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{m_25})})});
                        if(true)
                          break Success118;
                      }
                      term = term282;
                    }
                    Success119:
                    { 
                      if(cons25 == Normalise._consAnd_2)
                      { 
                        Fail142:
                        { 
                          IStrategoTerm f_25 = null;
                          IStrategoTerm g_25 = null;
                          IStrategoTerm h_25 = null;
                          IStrategoTerm i_25 = null;
                          IStrategoTerm arg527 = term.getSubterm(0);
                          if(arg527.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg527).getConstructor())
                            break Fail142;
                          f_25 = arg527.getSubterm(0);
                          IStrategoTerm arg528 = arg527.getSubterm(1);
                          if(arg528.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg528).getConstructor())
                            break Fail142;
                          g_25 = arg528.getSubterm(0);
                          IStrategoTerm arg529 = arg528.getSubterm(1);
                          if(arg529.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg529).getConstructor())
                            break Fail142;
                          h_25 = arg529.getSubterm(0);
                          IStrategoTerm arg530 = term.getSubterm(1);
                          if(arg530.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg530).getConstructor())
                            break Fail142;
                          if(arg530.getSubterm(0) != g_25 && !g_25.match(arg530.getSubterm(0)))
                            break Fail142;
                          IStrategoTerm arg531 = arg530.getSubterm(1);
                          if(arg531.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg531).getConstructor())
                            break Fail142;
                          i_25 = arg531.getSubterm(0);
                          term = termFactory.makeTuple(h_25, i_25);
                          term = leq$S_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail142;
                          term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{f_25, termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{g_25, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_25})})});
                          if(true)
                            break Success119;
                        }
                        term = term282;
                      }
                      Success120:
                      { 
                        if(cons25 == Normalise._consAnd_2)
                        { 
                          Fail143:
                          { 
                            IStrategoTerm z_24 = null;
                            IStrategoTerm a_25 = null;
                            IStrategoTerm b_25 = null;
                            IStrategoTerm c_25 = null;
                            IStrategoTerm arg532 = term.getSubterm(0);
                            if(arg532.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg532).getConstructor())
                              break Fail143;
                            z_24 = arg532.getSubterm(0);
                            IStrategoTerm arg533 = arg532.getSubterm(1);
                            if(arg533.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg533).getConstructor())
                              break Fail143;
                            a_25 = arg533.getSubterm(0);
                            IStrategoTerm arg534 = arg533.getSubterm(1);
                            if(arg534.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg534).getConstructor())
                              break Fail143;
                            b_25 = arg534.getSubterm(0);
                            IStrategoTerm arg535 = term.getSubterm(1);
                            if(arg535.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg535).getConstructor())
                              break Fail143;
                            if(arg535.getSubterm(0) != a_25 && !a_25.match(arg535.getSubterm(0)))
                              break Fail143;
                            IStrategoTerm arg536 = arg535.getSubterm(1);
                            if(arg536.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg536).getConstructor())
                              break Fail143;
                            c_25 = arg536.getSubterm(0);
                            term = termFactory.makeTuple(b_25, c_25);
                            term = maxstring_0_0.instance.invoke(context, term);
                            if(term == null)
                              break Fail143;
                            term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{z_24, termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{a_25, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                            if(true)
                              break Success120;
                          }
                          term = term282;
                        }
                        Success121:
                        { 
                          if(cons25 == Normalise._consOr_2)
                          { 
                            Fail144:
                            { 
                              IStrategoTerm u_24 = null;
                              IStrategoTerm v_24 = null;
                              IStrategoTerm w_24 = null;
                              IStrategoTerm arg537 = term.getSubterm(0);
                              if(arg537.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg537).getConstructor())
                                break Fail144;
                              u_24 = arg537.getSubterm(0);
                              IStrategoTerm arg538 = arg537.getSubterm(1);
                              if(arg538.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg538).getConstructor())
                                break Fail144;
                              v_24 = arg538.getSubterm(0);
                              IStrategoTerm arg539 = term.getSubterm(1);
                              if(arg539.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg539).getConstructor())
                                break Fail144;
                              if(arg539.getSubterm(0) != u_24 && !u_24.match(arg539.getSubterm(0)))
                                break Fail144;
                              IStrategoTerm arg540 = arg539.getSubterm(1);
                              if(arg540.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg540).getConstructor())
                                break Fail144;
                              w_24 = arg540.getSubterm(0);
                              term = termFactory.makeTuple(v_24, w_24);
                              term = maxstring_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail144;
                              term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{u_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                              if(true)
                                break Success121;
                            }
                            term = term282;
                          }
                          Success122:
                          { 
                            if(cons25 == Normalise._consOr_2)
                            { 
                              Fail145:
                              { 
                                IStrategoTerm q_24 = null;
                                IStrategoTerm r_24 = null;
                                IStrategoTerm s_24 = null;
                                IStrategoTerm arg541 = term.getSubterm(0);
                                if(arg541.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg541).getConstructor())
                                  break Fail145;
                                q_24 = arg541.getSubterm(0);
                                IStrategoTerm arg542 = arg541.getSubterm(1);
                                if(arg542.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg542).getConstructor())
                                  break Fail145;
                                r_24 = arg542.getSubterm(0);
                                IStrategoTerm arg543 = term.getSubterm(1);
                                if(arg543.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg543).getConstructor())
                                  break Fail145;
                                if(arg543.getSubterm(0) != q_24 && !q_24.match(arg543.getSubterm(0)))
                                  break Fail145;
                                IStrategoTerm arg544 = arg543.getSubterm(1);
                                if(arg544.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg544).getConstructor())
                                  break Fail145;
                                s_24 = arg544.getSubterm(0);
                                term = termFactory.makeTuple(r_24, s_24);
                                term = leq$S_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail145;
                                term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{q_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{s_24})});
                                if(true)
                                  break Success122;
                              }
                              term = term282;
                            }
                            Success123:
                            { 
                              if(cons25 == Normalise._consOr_2)
                              { 
                                Fail146:
                                { 
                                  IStrategoTerm m_24 = null;
                                  IStrategoTerm n_24 = null;
                                  IStrategoTerm o_24 = null;
                                  IStrategoTerm arg545 = term.getSubterm(0);
                                  if(arg545.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg545).getConstructor())
                                    break Fail146;
                                  m_24 = arg545.getSubterm(0);
                                  IStrategoTerm arg546 = arg545.getSubterm(1);
                                  if(arg546.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg546).getConstructor())
                                    break Fail146;
                                  n_24 = arg546.getSubterm(0);
                                  IStrategoTerm arg547 = term.getSubterm(1);
                                  if(arg547.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg547).getConstructor())
                                    break Fail146;
                                  if(arg547.getSubterm(0) != m_24 && !m_24.match(arg547.getSubterm(0)))
                                    break Fail146;
                                  IStrategoTerm arg548 = arg547.getSubterm(1);
                                  if(arg548.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg548).getConstructor())
                                    break Fail146;
                                  o_24 = arg548.getSubterm(0);
                                  term = termFactory.makeTuple(n_24, o_24);
                                  term = gt$S_0_0.instance.invoke(context, term);
                                  if(term == null)
                                    break Fail146;
                                  term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{m_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{n_24})});
                                  if(true)
                                    break Success123;
                                }
                                term = term282;
                              }
                              Success124:
                              { 
                                if(cons25 == Normalise._consOr_2)
                                { 
                                  Fail147:
                                  { 
                                    IStrategoTerm h_24 = null;
                                    IStrategoTerm i_24 = null;
                                    IStrategoTerm j_24 = null;
                                    IStrategoTerm arg549 = term.getSubterm(0);
                                    if(arg549.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg549).getConstructor())
                                      break Fail147;
                                    h_24 = arg549.getSubterm(0);
                                    IStrategoTerm arg550 = arg549.getSubterm(1);
                                    if(arg550.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg550).getConstructor())
                                      break Fail147;
                                    i_24 = arg550.getSubterm(0);
                                    IStrategoTerm arg551 = term.getSubterm(1);
                                    if(arg551.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg551).getConstructor())
                                      break Fail147;
                                    if(arg551.getSubterm(0) != h_24 && !h_24.match(arg551.getSubterm(0)))
                                      break Fail147;
                                    IStrategoTerm arg552 = arg551.getSubterm(1);
                                    if(arg552.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg552).getConstructor())
                                      break Fail147;
                                    j_24 = arg552.getSubterm(0);
                                    term = termFactory.makeTuple(i_24, j_24);
                                    term = maxstring_0_0.instance.invoke(context, term);
                                    if(term == null)
                                      break Fail147;
                                    term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{h_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                    if(true)
                                      break Success124;
                                  }
                                  term = term282;
                                }
                                Success125:
                                { 
                                  if(cons25 == Normalise._consOr_2)
                                  { 
                                    Fail148:
                                    { 
                                      IStrategoTerm f_24 = null;
                                      IStrategoTerm g_24 = null;
                                      IStrategoTerm arg553 = term.getSubterm(0);
                                      if(arg553.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg553).getConstructor())
                                        break Fail148;
                                      f_24 = arg553.getSubterm(0);
                                      IStrategoTerm arg554 = arg553.getSubterm(1);
                                      if(arg554.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg554).getConstructor())
                                        break Fail148;
                                      g_24 = arg554.getSubterm(0);
                                      IStrategoTerm arg555 = term.getSubterm(1);
                                      if(arg555.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg555).getConstructor())
                                        break Fail148;
                                      if(arg555.getSubterm(0) != f_24 && !f_24.match(arg555.getSubterm(0)))
                                        break Fail148;
                                      IStrategoTerm arg556 = arg555.getSubterm(1);
                                      if(arg556.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg556).getConstructor())
                                        break Fail148;
                                      if(arg556.getSubterm(0) != g_24 && !g_24.match(arg556.getSubterm(0)))
                                        break Fail148;
                                      term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{f_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_24})});
                                      if(true)
                                        break Success125;
                                    }
                                    term = term282;
                                  }
                                  Success126:
                                  { 
                                    if(cons25 == Normalise._consOr_2)
                                    { 
                                      Fail149:
                                      { 
                                        IStrategoTerm a_24 = null;
                                        IStrategoTerm b_24 = null;
                                        IStrategoTerm c_24 = null;
                                        IStrategoTerm arg557 = term.getSubterm(0);
                                        if(arg557.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg557).getConstructor())
                                          break Fail149;
                                        a_24 = arg557.getSubterm(0);
                                        IStrategoTerm arg558 = arg557.getSubterm(1);
                                        if(arg558.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg558).getConstructor())
                                          break Fail149;
                                        b_24 = arg558.getSubterm(0);
                                        IStrategoTerm arg559 = term.getSubterm(1);
                                        if(arg559.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg559).getConstructor())
                                          break Fail149;
                                        if(arg559.getSubterm(0) != a_24 && !a_24.match(arg559.getSubterm(0)))
                                          break Fail149;
                                        IStrategoTerm arg560 = arg559.getSubterm(1);
                                        if(arg560.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg560).getConstructor())
                                          break Fail149;
                                        c_24 = arg560.getSubterm(0);
                                        term = termFactory.makeTuple(b_24, c_24);
                                        term = minstring_0_0.instance.invoke(context, term);
                                        if(term == null)
                                          break Fail149;
                                        term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{a_24, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                        if(true)
                                          break Success126;
                                      }
                                      term = term282;
                                    }
                                    Success127:
                                    { 
                                      if(cons25 == Normalise._consOr_2)
                                      { 
                                        Fail150:
                                        { 
                                          IStrategoTerm w_23 = null;
                                          IStrategoTerm x_23 = null;
                                          IStrategoTerm y_23 = null;
                                          IStrategoTerm arg561 = term.getSubterm(0);
                                          if(arg561.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg561).getConstructor())
                                            break Fail150;
                                          w_23 = arg561.getSubterm(0);
                                          IStrategoTerm arg562 = arg561.getSubterm(1);
                                          if(arg562.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg562).getConstructor())
                                            break Fail150;
                                          x_23 = arg562.getSubterm(0);
                                          IStrategoTerm arg563 = term.getSubterm(1);
                                          if(arg563.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg563).getConstructor())
                                            break Fail150;
                                          if(arg563.getSubterm(0) != w_23 && !w_23.match(arg563.getSubterm(0)))
                                            break Fail150;
                                          IStrategoTerm arg564 = arg563.getSubterm(1);
                                          if(arg564.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg564).getConstructor())
                                            break Fail150;
                                          y_23 = arg564.getSubterm(0);
                                          term = termFactory.makeTuple(x_23, y_23);
                                          term = leq$S_0_0.instance.invoke(context, term);
                                          if(term == null)
                                            break Fail150;
                                          term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{w_23, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{x_23})});
                                          if(true)
                                            break Success127;
                                        }
                                        term = term282;
                                      }
                                      Success128:
                                      { 
                                        if(cons25 == Normalise._consOr_2)
                                        { 
                                          Fail151:
                                          { 
                                            IStrategoTerm s_23 = null;
                                            IStrategoTerm t_23 = null;
                                            IStrategoTerm u_23 = null;
                                            IStrategoTerm arg565 = term.getSubterm(0);
                                            if(arg565.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg565).getConstructor())
                                              break Fail151;
                                            s_23 = arg565.getSubterm(0);
                                            IStrategoTerm arg566 = arg565.getSubterm(1);
                                            if(arg566.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg566).getConstructor())
                                              break Fail151;
                                            t_23 = arg566.getSubterm(0);
                                            IStrategoTerm arg567 = term.getSubterm(1);
                                            if(arg567.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg567).getConstructor())
                                              break Fail151;
                                            if(arg567.getSubterm(0) != s_23 && !s_23.match(arg567.getSubterm(0)))
                                              break Fail151;
                                            IStrategoTerm arg568 = arg567.getSubterm(1);
                                            if(arg568.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg568).getConstructor())
                                              break Fail151;
                                            u_23 = arg568.getSubterm(0);
                                            term = termFactory.makeTuple(t_23, u_23);
                                            term = gt$S_0_0.instance.invoke(context, term);
                                            if(term == null)
                                              break Fail151;
                                            term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{s_23, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{u_23})});
                                            if(true)
                                              break Success128;
                                          }
                                          term = term282;
                                        }
                                        Success129:
                                        { 
                                          if(cons25 == Normalise._consOr_2)
                                          { 
                                            Fail152:
                                            { 
                                              IStrategoTerm n_23 = null;
                                              IStrategoTerm o_23 = null;
                                              IStrategoTerm p_23 = null;
                                              IStrategoTerm arg569 = term.getSubterm(0);
                                              if(arg569.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg569).getConstructor())
                                                break Fail152;
                                              n_23 = arg569.getSubterm(0);
                                              IStrategoTerm arg570 = arg569.getSubterm(1);
                                              if(arg570.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg570).getConstructor())
                                                break Fail152;
                                              o_23 = arg570.getSubterm(0);
                                              IStrategoTerm arg571 = term.getSubterm(1);
                                              if(arg571.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg571).getConstructor())
                                                break Fail152;
                                              if(arg571.getSubterm(0) != n_23 && !n_23.match(arg571.getSubterm(0)))
                                                break Fail152;
                                              IStrategoTerm arg572 = arg571.getSubterm(1);
                                              if(arg572.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg572).getConstructor())
                                                break Fail152;
                                              p_23 = arg572.getSubterm(0);
                                              term = termFactory.makeTuple(o_23, p_23);
                                              term = minstring_0_0.instance.invoke(context, term);
                                              if(term == null)
                                                break Fail152;
                                              term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{n_23, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                              if(true)
                                                break Success129;
                                            }
                                            term = term282;
                                          }
                                          Success130:
                                          { 
                                            if(cons25 == Normalise._consOr_2)
                                            { 
                                              Fail153:
                                              { 
                                                IStrategoTerm h_23 = null;
                                                IStrategoTerm i_23 = null;
                                                IStrategoTerm j_23 = null;
                                                IStrategoTerm k_23 = null;
                                                IStrategoTerm arg573 = term.getSubterm(0);
                                                if(arg573.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg573).getConstructor())
                                                  break Fail153;
                                                h_23 = arg573.getSubterm(0);
                                                IStrategoTerm arg574 = arg573.getSubterm(1);
                                                if(arg574.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg574).getConstructor())
                                                  break Fail153;
                                                i_23 = arg574.getSubterm(0);
                                                IStrategoTerm arg575 = arg574.getSubterm(1);
                                                if(arg575.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg575).getConstructor())
                                                  break Fail153;
                                                j_23 = arg575.getSubterm(0);
                                                IStrategoTerm arg576 = term.getSubterm(1);
                                                if(arg576.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg576).getConstructor())
                                                  break Fail153;
                                                if(arg576.getSubterm(0) != i_23 && !i_23.match(arg576.getSubterm(0)))
                                                  break Fail153;
                                                IStrategoTerm arg577 = arg576.getSubterm(1);
                                                if(arg577.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg577).getConstructor())
                                                  break Fail153;
                                                k_23 = arg577.getSubterm(0);
                                                term = termFactory.makeTuple(j_23, k_23);
                                                term = maxstring_0_0.instance.invoke(context, term);
                                                if(term == null)
                                                  break Fail153;
                                                term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{h_23, termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{i_23, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                                if(true)
                                                  break Success130;
                                              }
                                              term = term282;
                                            }
                                            Success131:
                                            { 
                                              if(cons25 == Normalise._consOr_2)
                                              { 
                                                Fail154:
                                                { 
                                                  IStrategoTerm c_23 = null;
                                                  IStrategoTerm d_23 = null;
                                                  IStrategoTerm e_23 = null;
                                                  IStrategoTerm f_23 = null;
                                                  IStrategoTerm arg578 = term.getSubterm(0);
                                                  if(arg578.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg578).getConstructor())
                                                    break Fail154;
                                                  c_23 = arg578.getSubterm(0);
                                                  IStrategoTerm arg579 = arg578.getSubterm(1);
                                                  if(arg579.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg579).getConstructor())
                                                    break Fail154;
                                                  d_23 = arg579.getSubterm(0);
                                                  IStrategoTerm arg580 = arg579.getSubterm(1);
                                                  if(arg580.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg580).getConstructor())
                                                    break Fail154;
                                                  e_23 = arg580.getSubterm(0);
                                                  IStrategoTerm arg581 = term.getSubterm(1);
                                                  if(arg581.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg581).getConstructor())
                                                    break Fail154;
                                                  if(arg581.getSubterm(0) != d_23 && !d_23.match(arg581.getSubterm(0)))
                                                    break Fail154;
                                                  IStrategoTerm arg582 = arg581.getSubterm(1);
                                                  if(arg582.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg582).getConstructor())
                                                    break Fail154;
                                                  f_23 = arg582.getSubterm(0);
                                                  term = termFactory.makeTuple(e_23, f_23);
                                                  term = leq$S_0_0.instance.invoke(context, term);
                                                  if(term == null)
                                                    break Fail154;
                                                  term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{c_23, termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{d_23, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{f_23})})});
                                                  if(true)
                                                    break Success131;
                                                }
                                                term = term282;
                                              }
                                              Success132:
                                              { 
                                                if(cons25 == Normalise._consOr_2)
                                                { 
                                                  Fail155:
                                                  { 
                                                    IStrategoTerm x_22 = null;
                                                    IStrategoTerm y_22 = null;
                                                    IStrategoTerm z_22 = null;
                                                    IStrategoTerm a_23 = null;
                                                    IStrategoTerm arg583 = term.getSubterm(0);
                                                    if(arg583.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg583).getConstructor())
                                                      break Fail155;
                                                    x_22 = arg583.getSubterm(0);
                                                    IStrategoTerm arg584 = arg583.getSubterm(1);
                                                    if(arg584.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg584).getConstructor())
                                                      break Fail155;
                                                    y_22 = arg584.getSubterm(0);
                                                    IStrategoTerm arg585 = arg584.getSubterm(1);
                                                    if(arg585.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg585).getConstructor())
                                                      break Fail155;
                                                    z_22 = arg585.getSubterm(0);
                                                    IStrategoTerm arg586 = term.getSubterm(1);
                                                    if(arg586.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg586).getConstructor())
                                                      break Fail155;
                                                    if(arg586.getSubterm(0) != y_22 && !y_22.match(arg586.getSubterm(0)))
                                                      break Fail155;
                                                    IStrategoTerm arg587 = arg586.getSubterm(1);
                                                    if(arg587.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg587).getConstructor())
                                                      break Fail155;
                                                    a_23 = arg587.getSubterm(0);
                                                    term = termFactory.makeTuple(z_22, a_23);
                                                    term = gt$S_0_0.instance.invoke(context, term);
                                                    if(term == null)
                                                      break Fail155;
                                                    term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{x_22, termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{y_22, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{z_22})})});
                                                    if(true)
                                                      break Success132;
                                                  }
                                                  term = term282;
                                                }
                                                Success133:
                                                { 
                                                  if(cons25 == Normalise._consOr_2)
                                                  { 
                                                    Fail156:
                                                    { 
                                                      IStrategoTerm r_22 = null;
                                                      IStrategoTerm s_22 = null;
                                                      IStrategoTerm t_22 = null;
                                                      IStrategoTerm u_22 = null;
                                                      IStrategoTerm arg588 = term.getSubterm(0);
                                                      if(arg588.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg588).getConstructor())
                                                        break Fail156;
                                                      r_22 = arg588.getSubterm(0);
                                                      IStrategoTerm arg589 = arg588.getSubterm(1);
                                                      if(arg589.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg589).getConstructor())
                                                        break Fail156;
                                                      s_22 = arg589.getSubterm(0);
                                                      IStrategoTerm arg590 = arg589.getSubterm(1);
                                                      if(arg590.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg590).getConstructor())
                                                        break Fail156;
                                                      t_22 = arg590.getSubterm(0);
                                                      IStrategoTerm arg591 = term.getSubterm(1);
                                                      if(arg591.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg591).getConstructor())
                                                        break Fail156;
                                                      if(arg591.getSubterm(0) != s_22 && !s_22.match(arg591.getSubterm(0)))
                                                        break Fail156;
                                                      IStrategoTerm arg592 = arg591.getSubterm(1);
                                                      if(arg592.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg592).getConstructor())
                                                        break Fail156;
                                                      u_22 = arg592.getSubterm(0);
                                                      term = termFactory.makeTuple(t_22, u_22);
                                                      term = maxstring_0_0.instance.invoke(context, term);
                                                      if(term == null)
                                                        break Fail156;
                                                      term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{r_22, termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{s_22, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                                      if(true)
                                                        break Success133;
                                                    }
                                                    term = term282;
                                                  }
                                                  Success134:
                                                  { 
                                                    if(cons25 == Normalise._consOr_2)
                                                    { 
                                                      Fail157:
                                                      { 
                                                        IStrategoTerm o_22 = null;
                                                        IStrategoTerm p_22 = null;
                                                        IStrategoTerm q_22 = null;
                                                        IStrategoTerm arg593 = term.getSubterm(0);
                                                        if(arg593.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg593).getConstructor())
                                                          break Fail157;
                                                        o_22 = arg593.getSubterm(0);
                                                        IStrategoTerm arg594 = arg593.getSubterm(1);
                                                        if(arg594.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg594).getConstructor())
                                                          break Fail157;
                                                        p_22 = arg594.getSubterm(0);
                                                        IStrategoTerm arg595 = arg594.getSubterm(1);
                                                        if(arg595.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg595).getConstructor())
                                                          break Fail157;
                                                        q_22 = arg595.getSubterm(0);
                                                        IStrategoTerm arg596 = term.getSubterm(1);
                                                        if(arg596.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg596).getConstructor())
                                                          break Fail157;
                                                        if(arg596.getSubterm(0) != p_22 && !p_22.match(arg596.getSubterm(0)))
                                                          break Fail157;
                                                        IStrategoTerm arg597 = arg596.getSubterm(1);
                                                        if(arg597.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg597).getConstructor())
                                                          break Fail157;
                                                        if(arg597.getSubterm(0) != q_22 && !q_22.match(arg597.getSubterm(0)))
                                                          break Fail157;
                                                        term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{o_22, termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{p_22, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{q_22})})});
                                                        if(true)
                                                          break Success134;
                                                      }
                                                      term = term282;
                                                    }
                                                    Success135:
                                                    { 
                                                      if(cons25 == Normalise._consOr_2)
                                                      { 
                                                        Fail158:
                                                        { 
                                                          IStrategoTerm i_22 = null;
                                                          IStrategoTerm j_22 = null;
                                                          IStrategoTerm k_22 = null;
                                                          IStrategoTerm l_22 = null;
                                                          IStrategoTerm arg598 = term.getSubterm(0);
                                                          if(arg598.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg598).getConstructor())
                                                            break Fail158;
                                                          i_22 = arg598.getSubterm(0);
                                                          IStrategoTerm arg599 = arg598.getSubterm(1);
                                                          if(arg599.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg599).getConstructor())
                                                            break Fail158;
                                                          j_22 = arg599.getSubterm(0);
                                                          IStrategoTerm arg600 = arg599.getSubterm(1);
                                                          if(arg600.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg600).getConstructor())
                                                            break Fail158;
                                                          k_22 = arg600.getSubterm(0);
                                                          IStrategoTerm arg601 = term.getSubterm(1);
                                                          if(arg601.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg601).getConstructor())
                                                            break Fail158;
                                                          if(arg601.getSubterm(0) != j_22 && !j_22.match(arg601.getSubterm(0)))
                                                            break Fail158;
                                                          IStrategoTerm arg602 = arg601.getSubterm(1);
                                                          if(arg602.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg602).getConstructor())
                                                            break Fail158;
                                                          l_22 = arg602.getSubterm(0);
                                                          term = termFactory.makeTuple(k_22, l_22);
                                                          term = minstring_0_0.instance.invoke(context, term);
                                                          if(term == null)
                                                            break Fail158;
                                                          term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{i_22, termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{j_22, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                                          if(true)
                                                            break Success135;
                                                        }
                                                        term = term282;
                                                      }
                                                      Success136:
                                                      { 
                                                        if(cons25 == Normalise._consOr_2)
                                                        { 
                                                          Fail159:
                                                          { 
                                                            IStrategoTerm d_22 = null;
                                                            IStrategoTerm e_22 = null;
                                                            IStrategoTerm f_22 = null;
                                                            IStrategoTerm g_22 = null;
                                                            IStrategoTerm arg603 = term.getSubterm(0);
                                                            if(arg603.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg603).getConstructor())
                                                              break Fail159;
                                                            d_22 = arg603.getSubterm(0);
                                                            IStrategoTerm arg604 = arg603.getSubterm(1);
                                                            if(arg604.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg604).getConstructor())
                                                              break Fail159;
                                                            e_22 = arg604.getSubterm(0);
                                                            IStrategoTerm arg605 = arg604.getSubterm(1);
                                                            if(arg605.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg605).getConstructor())
                                                              break Fail159;
                                                            f_22 = arg605.getSubterm(0);
                                                            IStrategoTerm arg606 = term.getSubterm(1);
                                                            if(arg606.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg606).getConstructor())
                                                              break Fail159;
                                                            if(arg606.getSubterm(0) != e_22 && !e_22.match(arg606.getSubterm(0)))
                                                              break Fail159;
                                                            IStrategoTerm arg607 = arg606.getSubterm(1);
                                                            if(arg607.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg607).getConstructor())
                                                              break Fail159;
                                                            g_22 = arg607.getSubterm(0);
                                                            term = termFactory.makeTuple(f_22, g_22);
                                                            term = leq$S_0_0.instance.invoke(context, term);
                                                            if(term == null)
                                                              break Fail159;
                                                            term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{d_22, termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{e_22, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{f_22})})});
                                                            if(true)
                                                              break Success136;
                                                          }
                                                          term = term282;
                                                        }
                                                        Success137:
                                                        { 
                                                          if(cons25 == Normalise._consOr_2)
                                                          { 
                                                            Fail160:
                                                            { 
                                                              IStrategoTerm y_21 = null;
                                                              IStrategoTerm z_21 = null;
                                                              IStrategoTerm a_22 = null;
                                                              IStrategoTerm b_22 = null;
                                                              IStrategoTerm arg608 = term.getSubterm(0);
                                                              if(arg608.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg608).getConstructor())
                                                                break Fail160;
                                                              y_21 = arg608.getSubterm(0);
                                                              IStrategoTerm arg609 = arg608.getSubterm(1);
                                                              if(arg609.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg609).getConstructor())
                                                                break Fail160;
                                                              z_21 = arg609.getSubterm(0);
                                                              IStrategoTerm arg610 = arg609.getSubterm(1);
                                                              if(arg610.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg610).getConstructor())
                                                                break Fail160;
                                                              a_22 = arg610.getSubterm(0);
                                                              IStrategoTerm arg611 = term.getSubterm(1);
                                                              if(arg611.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg611).getConstructor())
                                                                break Fail160;
                                                              if(arg611.getSubterm(0) != z_21 && !z_21.match(arg611.getSubterm(0)))
                                                                break Fail160;
                                                              IStrategoTerm arg612 = arg611.getSubterm(1);
                                                              if(arg612.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg612).getConstructor())
                                                                break Fail160;
                                                              b_22 = arg612.getSubterm(0);
                                                              term = termFactory.makeTuple(a_22, b_22);
                                                              term = gt$S_0_0.instance.invoke(context, term);
                                                              if(term == null)
                                                                break Fail160;
                                                              term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{y_21, termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{z_21, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_22})})});
                                                              if(true)
                                                                break Success137;
                                                            }
                                                            term = term282;
                                                          }
                                                          if(cons25 == Normalise._consOr_2)
                                                          { 
                                                            IStrategoTerm s_21 = null;
                                                            IStrategoTerm t_21 = null;
                                                            IStrategoTerm u_21 = null;
                                                            IStrategoTerm v_21 = null;
                                                            IStrategoTerm arg613 = term.getSubterm(0);
                                                            if(arg613.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg613).getConstructor())
                                                              break Fail134;
                                                            s_21 = arg613.getSubterm(0);
                                                            IStrategoTerm arg614 = arg613.getSubterm(1);
                                                            if(arg614.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg614).getConstructor())
                                                              break Fail134;
                                                            t_21 = arg614.getSubterm(0);
                                                            IStrategoTerm arg615 = arg614.getSubterm(1);
                                                            if(arg615.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg615).getConstructor())
                                                              break Fail134;
                                                            u_21 = arg615.getSubterm(0);
                                                            IStrategoTerm arg616 = term.getSubterm(1);
                                                            if(arg616.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg616).getConstructor())
                                                              break Fail134;
                                                            if(arg616.getSubterm(0) != t_21 && !t_21.match(arg616.getSubterm(0)))
                                                              break Fail134;
                                                            IStrategoTerm arg617 = arg616.getSubterm(1);
                                                            if(arg617.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg617).getConstructor())
                                                              break Fail134;
                                                            v_21 = arg617.getSubterm(0);
                                                            term = termFactory.makeTuple(u_21, v_21);
                                                            term = minstring_0_0.instance.invoke(context, term);
                                                            if(term == null)
                                                              break Fail134;
                                                            term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{s_21, termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{t_21, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                                          }
                                                          else
                                                          { 
                                                            break Fail134;
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Merge$Compare_0_0 extends Strategy 
  { 
    public static $Merge$Compare_0_0 instance = new $Merge$Compare_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("MergeCompare_0_0");
      Fail161:
      { 
        IStrategoTerm term308 = term;
        IStrategoConstructor cons26 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success138:
        { 
          if(cons26 == Normalise._consAnd_2)
          { 
            Fail162:
            { 
              IStrategoTerm k_28 = null;
              IStrategoTerm l_28 = null;
              IStrategoTerm m_28 = null;
              IStrategoTerm arg618 = term.getSubterm(0);
              if(arg618.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg618).getConstructor())
                break Fail162;
              k_28 = arg618.getSubterm(0);
              IStrategoTerm arg619 = arg618.getSubterm(1);
              if(arg619.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg619).getConstructor())
                break Fail162;
              l_28 = arg619.getSubterm(0);
              IStrategoTerm arg620 = term.getSubterm(1);
              if(arg620.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg620).getConstructor())
                break Fail162;
              if(arg620.getSubterm(0) != k_28 && !k_28.match(arg620.getSubterm(0)))
                break Fail162;
              IStrategoTerm arg621 = arg620.getSubterm(1);
              if(arg621.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg621).getConstructor())
                break Fail162;
              m_28 = arg621.getSubterm(0);
              term = termFactory.makeTuple(l_28, m_28);
              term = minstring_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail162;
              term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{k_28, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
              if(true)
                break Success138;
            }
            term = term308;
          }
          Success139:
          { 
            if(cons26 == Normalise._consAnd_2)
            { 
              Fail163:
              { 
                IStrategoTerm g_28 = null;
                IStrategoTerm h_28 = null;
                IStrategoTerm i_28 = null;
                IStrategoTerm arg622 = term.getSubterm(0);
                if(arg622.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg622).getConstructor())
                  break Fail163;
                g_28 = arg622.getSubterm(0);
                IStrategoTerm arg623 = arg622.getSubterm(1);
                if(arg623.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg623).getConstructor())
                  break Fail163;
                h_28 = arg623.getSubterm(0);
                IStrategoTerm arg624 = term.getSubterm(1);
                if(arg624.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg624).getConstructor())
                  break Fail163;
                if(arg624.getSubterm(0) != g_28 && !g_28.match(arg624.getSubterm(0)))
                  break Fail163;
                IStrategoTerm arg625 = arg624.getSubterm(1);
                if(arg625.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg625).getConstructor())
                  break Fail163;
                i_28 = arg625.getSubterm(0);
                term = termFactory.makeTuple(h_28, i_28);
                term = gt$S_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail163;
                term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{g_28, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_28})});
                if(true)
                  break Success139;
              }
              term = term308;
            }
            Success140:
            { 
              if(cons26 == Normalise._consAnd_2)
              { 
                Fail164:
                { 
                  IStrategoTerm c_28 = null;
                  IStrategoTerm d_28 = null;
                  IStrategoTerm e_28 = null;
                  IStrategoTerm arg626 = term.getSubterm(0);
                  if(arg626.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg626).getConstructor())
                    break Fail164;
                  c_28 = arg626.getSubterm(0);
                  IStrategoTerm arg627 = arg626.getSubterm(1);
                  if(arg627.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg627).getConstructor())
                    break Fail164;
                  d_28 = arg627.getSubterm(0);
                  IStrategoTerm arg628 = term.getSubterm(1);
                  if(arg628.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg628).getConstructor())
                    break Fail164;
                  if(arg628.getSubterm(0) != c_28 && !c_28.match(arg628.getSubterm(0)))
                    break Fail164;
                  IStrategoTerm arg629 = arg628.getSubterm(1);
                  if(arg629.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg629).getConstructor())
                    break Fail164;
                  e_28 = arg629.getSubterm(0);
                  term = termFactory.makeTuple(d_28, e_28);
                  term = leq$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail164;
                  term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{c_28, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{d_28})});
                  if(true)
                    break Success140;
                }
                term = term308;
              }
              Success141:
              { 
                if(cons26 == Normalise._consAnd_2)
                { 
                  Fail165:
                  { 
                    IStrategoTerm x_27 = null;
                    IStrategoTerm y_27 = null;
                    IStrategoTerm z_27 = null;
                    IStrategoTerm arg630 = term.getSubterm(0);
                    if(arg630.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg630).getConstructor())
                      break Fail165;
                    x_27 = arg630.getSubterm(0);
                    IStrategoTerm arg631 = arg630.getSubterm(1);
                    if(arg631.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg631).getConstructor())
                      break Fail165;
                    y_27 = arg631.getSubterm(0);
                    IStrategoTerm arg632 = term.getSubterm(1);
                    if(arg632.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg632).getConstructor())
                      break Fail165;
                    if(arg632.getSubterm(0) != x_27 && !x_27.match(arg632.getSubterm(0)))
                      break Fail165;
                    IStrategoTerm arg633 = arg632.getSubterm(1);
                    if(arg633.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg633).getConstructor())
                      break Fail165;
                    z_27 = arg633.getSubterm(0);
                    term = termFactory.makeTuple(y_27, z_27);
                    term = minstring_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail165;
                    term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{x_27, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                    if(true)
                      break Success141;
                  }
                  term = term308;
                }
                Success142:
                { 
                  if(cons26 == Normalise._consAnd_2)
                  { 
                    Fail166:
                    { 
                      IStrategoTerm t_27 = null;
                      IStrategoTerm u_27 = null;
                      IStrategoTerm v_27 = null;
                      IStrategoTerm arg634 = term.getSubterm(0);
                      if(arg634.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg634).getConstructor())
                        break Fail166;
                      t_27 = arg634.getSubterm(0);
                      IStrategoTerm arg635 = arg634.getSubterm(1);
                      if(arg635.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg635).getConstructor())
                        break Fail166;
                      u_27 = arg635.getSubterm(0);
                      IStrategoTerm arg636 = term.getSubterm(1);
                      if(arg636.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg636).getConstructor())
                        break Fail166;
                      if(arg636.getSubterm(0) != t_27 && !t_27.match(arg636.getSubterm(0)))
                        break Fail166;
                      IStrategoTerm arg637 = arg636.getSubterm(1);
                      if(arg637.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg637).getConstructor())
                        break Fail166;
                      v_27 = arg637.getSubterm(0);
                      term = termFactory.makeTuple(u_27, v_27);
                      IStrategoTerm term313 = term;
                      Success143:
                      { 
                        Fail167:
                        { 
                          term = eq_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail167;
                          { 
                            if(true)
                              break Fail166;
                            if(true)
                              break Success143;
                          }
                        }
                        term = term313;
                      }
                      term = Normalise.constFalse0;
                      if(true)
                        break Success142;
                    }
                    term = term308;
                  }
                  Success144:
                  { 
                    if(cons26 == Normalise._consAnd_2)
                    { 
                      Fail168:
                      { 
                        IStrategoTerm r_27 = null;
                        IStrategoTerm s_27 = null;
                        IStrategoTerm arg638 = term.getSubterm(0);
                        if(arg638.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg638).getConstructor())
                          break Fail168;
                        r_27 = arg638.getSubterm(0);
                        IStrategoTerm arg639 = arg638.getSubterm(1);
                        if(arg639.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg639).getConstructor())
                          break Fail168;
                        s_27 = arg639.getSubterm(0);
                        IStrategoTerm arg640 = term.getSubterm(1);
                        if(arg640.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg640).getConstructor())
                          break Fail168;
                        if(arg640.getSubterm(0) != r_27 && !r_27.match(arg640.getSubterm(0)))
                          break Fail168;
                        IStrategoTerm arg641 = arg640.getSubterm(1);
                        if(arg641.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg641).getConstructor())
                          break Fail168;
                        if(arg641.getSubterm(0) != s_27 && !s_27.match(arg641.getSubterm(0)))
                          break Fail168;
                        term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{r_27, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{s_27})});
                        if(true)
                          break Success144;
                      }
                      term = term308;
                    }
                    Success145:
                    { 
                      if(cons26 == Normalise._consAnd_2)
                      { 
                        Fail169:
                        { 
                          IStrategoTerm m_27 = null;
                          IStrategoTerm n_27 = null;
                          IStrategoTerm o_27 = null;
                          IStrategoTerm arg642 = term.getSubterm(0);
                          if(arg642.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg642).getConstructor())
                            break Fail169;
                          m_27 = arg642.getSubterm(0);
                          IStrategoTerm arg643 = arg642.getSubterm(1);
                          if(arg643.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg643).getConstructor())
                            break Fail169;
                          n_27 = arg643.getSubterm(0);
                          IStrategoTerm arg644 = term.getSubterm(1);
                          if(arg644.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg644).getConstructor())
                            break Fail169;
                          if(arg644.getSubterm(0) != m_27 && !m_27.match(arg644.getSubterm(0)))
                            break Fail169;
                          IStrategoTerm arg645 = arg644.getSubterm(1);
                          if(arg645.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg645).getConstructor())
                            break Fail169;
                          o_27 = arg645.getSubterm(0);
                          term = termFactory.makeTuple(n_27, o_27);
                          term = maxstring_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail169;
                          term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{m_27, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                          if(true)
                            break Success145;
                        }
                        term = term308;
                      }
                      Success146:
                      { 
                        if(cons26 == Normalise._consAnd_2)
                        { 
                          Fail170:
                          { 
                            IStrategoTerm i_27 = null;
                            IStrategoTerm j_27 = null;
                            IStrategoTerm k_27 = null;
                            IStrategoTerm arg646 = term.getSubterm(0);
                            if(arg646.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg646).getConstructor())
                              break Fail170;
                            i_27 = arg646.getSubterm(0);
                            IStrategoTerm arg647 = arg646.getSubterm(1);
                            if(arg647.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg647).getConstructor())
                              break Fail170;
                            j_27 = arg647.getSubterm(0);
                            IStrategoTerm arg648 = term.getSubterm(1);
                            if(arg648.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg648).getConstructor())
                              break Fail170;
                            if(arg648.getSubterm(0) != i_27 && !i_27.match(arg648.getSubterm(0)))
                              break Fail170;
                            IStrategoTerm arg649 = arg648.getSubterm(1);
                            if(arg649.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg649).getConstructor())
                              break Fail170;
                            k_27 = arg649.getSubterm(0);
                            term = termFactory.makeTuple(j_27, k_27);
                            term = gt$S_0_0.instance.invoke(context, term);
                            if(term == null)
                              break Fail170;
                            term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{i_27, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_27})});
                            if(true)
                              break Success146;
                          }
                          term = term308;
                        }
                        Success147:
                        { 
                          if(cons26 == Normalise._consAnd_2)
                          { 
                            Fail171:
                            { 
                              IStrategoTerm e_27 = null;
                              IStrategoTerm f_27 = null;
                              IStrategoTerm g_27 = null;
                              IStrategoTerm arg650 = term.getSubterm(0);
                              if(arg650.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg650).getConstructor())
                                break Fail171;
                              e_27 = arg650.getSubterm(0);
                              IStrategoTerm arg651 = arg650.getSubterm(1);
                              if(arg651.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg651).getConstructor())
                                break Fail171;
                              f_27 = arg651.getSubterm(0);
                              IStrategoTerm arg652 = term.getSubterm(1);
                              if(arg652.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg652).getConstructor())
                                break Fail171;
                              if(arg652.getSubterm(0) != e_27 && !e_27.match(arg652.getSubterm(0)))
                                break Fail171;
                              IStrategoTerm arg653 = arg652.getSubterm(1);
                              if(arg653.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg653).getConstructor())
                                break Fail171;
                              g_27 = arg653.getSubterm(0);
                              term = termFactory.makeTuple(f_27, g_27);
                              term = leq$S_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail171;
                              term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{e_27, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_27})});
                              if(true)
                                break Success147;
                            }
                            term = term308;
                          }
                          Success148:
                          { 
                            if(cons26 == Normalise._consAnd_2)
                            { 
                              Fail172:
                              { 
                                IStrategoTerm z_26 = null;
                                IStrategoTerm a_27 = null;
                                IStrategoTerm b_27 = null;
                                IStrategoTerm arg654 = term.getSubterm(0);
                                if(arg654.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg654).getConstructor())
                                  break Fail172;
                                z_26 = arg654.getSubterm(0);
                                IStrategoTerm arg655 = arg654.getSubterm(1);
                                if(arg655.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg655).getConstructor())
                                  break Fail172;
                                a_27 = arg655.getSubterm(0);
                                IStrategoTerm arg656 = term.getSubterm(1);
                                if(arg656.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg656).getConstructor())
                                  break Fail172;
                                if(arg656.getSubterm(0) != z_26 && !z_26.match(arg656.getSubterm(0)))
                                  break Fail172;
                                IStrategoTerm arg657 = arg656.getSubterm(1);
                                if(arg657.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg657).getConstructor())
                                  break Fail172;
                                b_27 = arg657.getSubterm(0);
                                term = termFactory.makeTuple(a_27, b_27);
                                term = maxstring_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail172;
                                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{z_26, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                if(true)
                                  break Success148;
                              }
                              term = term308;
                            }
                            Success149:
                            { 
                              if(cons26 == Normalise._consAnd_2)
                              { 
                                Fail173:
                                { 
                                  IStrategoTerm t_26 = null;
                                  IStrategoTerm u_26 = null;
                                  IStrategoTerm v_26 = null;
                                  IStrategoTerm w_26 = null;
                                  IStrategoTerm arg658 = term.getSubterm(0);
                                  if(arg658.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg658).getConstructor())
                                    break Fail173;
                                  t_26 = arg658.getSubterm(0);
                                  IStrategoTerm arg659 = arg658.getSubterm(1);
                                  if(arg659.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg659).getConstructor())
                                    break Fail173;
                                  u_26 = arg659.getSubterm(0);
                                  IStrategoTerm arg660 = arg659.getSubterm(1);
                                  if(arg660.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg660).getConstructor())
                                    break Fail173;
                                  v_26 = arg660.getSubterm(0);
                                  IStrategoTerm arg661 = term.getSubterm(1);
                                  if(arg661.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg661).getConstructor())
                                    break Fail173;
                                  if(arg661.getSubterm(0) != u_26 && !u_26.match(arg661.getSubterm(0)))
                                    break Fail173;
                                  IStrategoTerm arg662 = arg661.getSubterm(1);
                                  if(arg662.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg662).getConstructor())
                                    break Fail173;
                                  w_26 = arg662.getSubterm(0);
                                  term = termFactory.makeTuple(v_26, w_26);
                                  term = minstring_0_0.instance.invoke(context, term);
                                  if(term == null)
                                    break Fail173;
                                  term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{t_26, termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{u_26, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                  if(true)
                                    break Success149;
                                }
                                term = term308;
                              }
                              Success150:
                              { 
                                if(cons26 == Normalise._consAnd_2)
                                { 
                                  Fail174:
                                  { 
                                    IStrategoTerm o_26 = null;
                                    IStrategoTerm p_26 = null;
                                    IStrategoTerm q_26 = null;
                                    IStrategoTerm r_26 = null;
                                    IStrategoTerm arg663 = term.getSubterm(0);
                                    if(arg663.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg663).getConstructor())
                                      break Fail174;
                                    o_26 = arg663.getSubterm(0);
                                    IStrategoTerm arg664 = arg663.getSubterm(1);
                                    if(arg664.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg664).getConstructor())
                                      break Fail174;
                                    p_26 = arg664.getSubterm(0);
                                    IStrategoTerm arg665 = arg664.getSubterm(1);
                                    if(arg665.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg665).getConstructor())
                                      break Fail174;
                                    q_26 = arg665.getSubterm(0);
                                    IStrategoTerm arg666 = term.getSubterm(1);
                                    if(arg666.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg666).getConstructor())
                                      break Fail174;
                                    if(arg666.getSubterm(0) != p_26 && !p_26.match(arg666.getSubterm(0)))
                                      break Fail174;
                                    IStrategoTerm arg667 = arg666.getSubterm(1);
                                    if(arg667.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg667).getConstructor())
                                      break Fail174;
                                    r_26 = arg667.getSubterm(0);
                                    term = termFactory.makeTuple(q_26, r_26);
                                    term = gt$S_0_0.instance.invoke(context, term);
                                    if(term == null)
                                      break Fail174;
                                    term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{o_26, termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{p_26, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{r_26})})});
                                    if(true)
                                      break Success150;
                                  }
                                  term = term308;
                                }
                                term = $Merge$Compare_0_0_fragment_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail161;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eval$Expr_0_0 extends Strategy 
  { 
    public static $Eval$Expr_0_0 instance = new $Eval$Expr_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("EvalExpr_0_0");
      Fail175:
      { 
        IStrategoTerm term321 = term;
        IStrategoConstructor cons27 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success151:
        { 
          if(cons27 == Normalise._consAdd_2)
          { 
            Fail176:
            { 
              IStrategoTerm c_32 = null;
              IStrategoTerm d_32 = null;
              IStrategoTerm arg668 = term.getSubterm(0);
              if(arg668.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg668).getConstructor())
                break Fail176;
              c_32 = arg668.getSubterm(0);
              IStrategoTerm arg669 = term.getSubterm(1);
              if(arg669.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg669).getConstructor())
                break Fail176;
              d_32 = arg669.getSubterm(0);
              term = termFactory.makeTuple(c_32, d_32);
              term = add$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail176;
              term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
              if(true)
                break Success151;
            }
            term = term321;
          }
          Success152:
          { 
            if(cons27 == Normalise._consAdd_2)
            { 
              Fail177:
              { 
                IStrategoTerm x_31 = null;
                IStrategoTerm y_31 = null;
                IStrategoTerm z_31 = null;
                IStrategoTerm arg670 = term.getSubterm(0);
                if(arg670.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg670).getConstructor())
                  break Fail177;
                x_31 = arg670.getSubterm(0);
                IStrategoTerm arg671 = arg670.getSubterm(1);
                if(arg671.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg671).getConstructor())
                  break Fail177;
                y_31 = arg671.getSubterm(0);
                IStrategoTerm arg672 = term.getSubterm(1);
                if(arg672.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg672).getConstructor())
                  break Fail177;
                z_31 = arg672.getSubterm(0);
                term = termFactory.makeTuple(y_31, z_31);
                term = add$S_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail177;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{x_31, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                if(true)
                  break Success152;
              }
              term = term321;
            }
            Success153:
            { 
              if(cons27 == Normalise._consMul_2)
              { 
                Fail178:
                { 
                  IStrategoTerm t_31 = null;
                  IStrategoTerm u_31 = null;
                  IStrategoTerm arg673 = term.getSubterm(0);
                  if(arg673.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg673).getConstructor())
                    break Fail178;
                  t_31 = arg673.getSubterm(0);
                  IStrategoTerm arg674 = term.getSubterm(1);
                  if(arg674.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg674).getConstructor())
                    break Fail178;
                  u_31 = arg674.getSubterm(0);
                  term = termFactory.makeTuple(t_31, u_31);
                  term = mul$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail178;
                  term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                  if(true)
                    break Success153;
                }
                term = term321;
              }
              Success154:
              { 
                if(cons27 == Normalise._consMul_2)
                { 
                  Fail179:
                  { 
                    IStrategoTerm o_31 = null;
                    IStrategoTerm p_31 = null;
                    IStrategoTerm q_31 = null;
                    IStrategoTerm arg675 = term.getSubterm(0);
                    if(arg675.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg675).getConstructor())
                      break Fail179;
                    o_31 = arg675.getSubterm(0);
                    IStrategoTerm arg676 = arg675.getSubterm(1);
                    if(arg676.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg676).getConstructor())
                      break Fail179;
                    p_31 = arg676.getSubterm(0);
                    IStrategoTerm arg677 = term.getSubterm(1);
                    if(arg677.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg677).getConstructor())
                      break Fail179;
                    q_31 = arg677.getSubterm(0);
                    term = termFactory.makeTuple(p_31, q_31);
                    term = mul$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail179;
                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{o_31, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                    if(true)
                      break Success154;
                  }
                  term = term321;
                }
                Success155:
                { 
                  if(cons27 == Normalise._consMul_2)
                  { 
                    Fail180:
                    { 
                      IStrategoTerm m_31 = null;
                      IStrategoTerm n_31 = null;
                      IStrategoTerm arg678 = term.getSubterm(0);
                      if(arg678.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg678).getConstructor())
                        break Fail180;
                      m_31 = arg678.getSubterm(0);
                      n_31 = arg678.getSubterm(1);
                      IStrategoTerm arg679 = term.getSubterm(1);
                      if(arg679.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg679).getConstructor())
                        break Fail180;
                      IStrategoTerm arg680 = arg679.getSubterm(0);
                      if(arg680.getTermType() != IStrategoTerm.STRING || !"-1".equals(((IStrategoString)arg680).stringValue()))
                        break Fail180;
                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{m_31, Normalise.constInt0}), n_31});
                      if(true)
                        break Success155;
                    }
                    term = term321;
                  }
                  Success156:
                  { 
                    if(cons27 == Normalise._consDiv_2)
                    { 
                      Fail181:
                      { 
                        IStrategoTerm i_31 = null;
                        IStrategoTerm j_31 = null;
                        IStrategoTerm arg681 = term.getSubterm(0);
                        if(arg681.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg681).getConstructor())
                          break Fail181;
                        i_31 = arg681.getSubterm(0);
                        IStrategoTerm arg682 = term.getSubterm(1);
                        if(arg682.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg682).getConstructor())
                          break Fail181;
                        j_31 = arg682.getSubterm(0);
                        term = termFactory.makeTuple(i_31, j_31);
                        term = mod$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail181;
                        if(term.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)term).stringValue()))
                          break Fail181;
                        term = termFactory.makeTuple(i_31, j_31);
                        term = div$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail181;
                        term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                        if(true)
                          break Success156;
                      }
                      term = term321;
                    }
                    Success157:
                    { 
                      if(cons27 == Normalise._consDiv_2)
                      { 
                        Fail182:
                        { 
                          IStrategoTerm d_31 = null;
                          IStrategoTerm e_31 = null;
                          IStrategoTerm f_31 = null;
                          IStrategoTerm arg683 = term.getSubterm(0);
                          if(arg683.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg683).getConstructor())
                            break Fail182;
                          d_31 = arg683.getSubterm(0);
                          IStrategoTerm arg684 = arg683.getSubterm(1);
                          if(arg684.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg684).getConstructor())
                            break Fail182;
                          e_31 = arg684.getSubterm(0);
                          IStrategoTerm arg685 = term.getSubterm(1);
                          if(arg685.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg685).getConstructor())
                            break Fail182;
                          f_31 = arg685.getSubterm(0);
                          term = termFactory.makeTuple(e_31, f_31);
                          term = mod$S_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail182;
                          if(term.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)term).stringValue()))
                            break Fail182;
                          term = termFactory.makeTuple(e_31, f_31);
                          term = div$S_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail182;
                          term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{d_31, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                          if(true)
                            break Success157;
                        }
                        term = term321;
                      }
                      Success158:
                      { 
                        if(cons27 == Normalise._consMul_2)
                        { 
                          Fail183:
                          { 
                            IStrategoTerm y_30 = null;
                            IStrategoTerm z_30 = null;
                            IStrategoTerm a_31 = null;
                            IStrategoTerm arg686 = term.getSubterm(0);
                            if(arg686.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg686).getConstructor())
                              break Fail183;
                            y_30 = arg686.getSubterm(0);
                            IStrategoTerm arg687 = arg686.getSubterm(1);
                            if(arg687.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg687).getConstructor())
                              break Fail183;
                            z_30 = arg687.getSubterm(0);
                            IStrategoTerm arg688 = term.getSubterm(1);
                            if(arg688.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg688).getConstructor())
                              break Fail183;
                            a_31 = arg688.getSubterm(0);
                            term = termFactory.makeTuple(z_30, a_31);
                            term = mul$S_0_0.instance.invoke(context, term);
                            if(term == null)
                              break Fail183;
                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{y_30, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_31})}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                            if(true)
                              break Success158;
                          }
                          term = term321;
                        }
                        Success159:
                        { 
                          if(cons27 == Normalise._consAdd_2)
                          { 
                            Fail184:
                            { 
                              IStrategoTerm t_30 = null;
                              IStrategoTerm u_30 = null;
                              IStrategoTerm v_30 = null;
                              IStrategoTerm arg689 = term.getSubterm(0);
                              if(arg689.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg689).getConstructor())
                                break Fail184;
                              t_30 = arg689.getSubterm(0);
                              IStrategoTerm arg690 = arg689.getSubterm(1);
                              if(arg690.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg690).getConstructor())
                                break Fail184;
                              u_30 = arg690.getSubterm(0);
                              IStrategoTerm arg691 = term.getSubterm(1);
                              if(arg691.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg691).getConstructor())
                                break Fail184;
                              if(arg691.getSubterm(0) != t_30 && !t_30.match(arg691.getSubterm(0)))
                                break Fail184;
                              IStrategoTerm arg692 = arg691.getSubterm(1);
                              if(arg692.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg692).getConstructor())
                                break Fail184;
                              v_30 = arg692.getSubterm(0);
                              term = termFactory.makeTuple(u_30, v_30);
                              term = add$S_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail184;
                              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{t_30, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                              if(true)
                                break Success159;
                            }
                            term = term321;
                          }
                          Success160:
                          { 
                            if(cons27 == Normalise._consAdd_2)
                            { 
                              Fail185:
                              { 
                                IStrategoTerm n_30 = null;
                                IStrategoTerm o_30 = null;
                                IStrategoTerm p_30 = null;
                                IStrategoTerm q_30 = null;
                                IStrategoTerm arg693 = term.getSubterm(0);
                                if(arg693.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg693).getConstructor())
                                  break Fail185;
                                n_30 = arg693.getSubterm(0);
                                IStrategoTerm arg694 = arg693.getSubterm(1);
                                if(arg694.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg694).getConstructor())
                                  break Fail185;
                                o_30 = arg694.getSubterm(0);
                                IStrategoTerm arg695 = arg694.getSubterm(1);
                                if(arg695.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg695).getConstructor())
                                  break Fail185;
                                p_30 = arg695.getSubterm(0);
                                IStrategoTerm arg696 = term.getSubterm(1);
                                if(arg696.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg696).getConstructor())
                                  break Fail185;
                                if(arg696.getSubterm(0) != o_30 && !o_30.match(arg696.getSubterm(0)))
                                  break Fail185;
                                IStrategoTerm arg697 = arg696.getSubterm(1);
                                if(arg697.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg697).getConstructor())
                                  break Fail185;
                                q_30 = arg697.getSubterm(0);
                                term = termFactory.makeTuple(p_30, q_30);
                                term = add$S_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail185;
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{n_30, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{o_30, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})})});
                                if(true)
                                  break Success160;
                              }
                              term = term321;
                            }
                            Success161:
                            { 
                              if(cons27 == Normalise._consDiv_2)
                              { 
                                Fail186:
                                { 
                                  IStrategoTerm m_30 = null;
                                  m_30 = term.getSubterm(0);
                                  if(term.getSubterm(1) != m_30 && !m_30.match(term.getSubterm(1)))
                                    break Fail186;
                                  term = Normalise.constInt1;
                                  if(true)
                                    break Success161;
                                }
                                term = term321;
                              }
                              Success162:
                              { 
                                if(cons27 == Normalise._consDiv_2)
                                { 
                                  Fail187:
                                  { 
                                    IStrategoTerm k_30 = null;
                                    IStrategoTerm l_30 = null;
                                    IStrategoTerm arg698 = term.getSubterm(0);
                                    if(arg698.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg698).getConstructor())
                                      break Fail187;
                                    k_30 = arg698.getSubterm(0);
                                    IStrategoTerm arg699 = arg698.getSubterm(1);
                                    if(arg699.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg699).getConstructor())
                                      break Fail187;
                                    l_30 = arg699.getSubterm(0);
                                    if(term.getSubterm(1) != k_30 && !k_30.match(term.getSubterm(1)))
                                      break Fail187;
                                    term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_30});
                                    if(true)
                                      break Success162;
                                  }
                                  term = term321;
                                }
                                Success163:
                                { 
                                  if(cons27 == Normalise._consDiv_2)
                                  { 
                                    Fail188:
                                    { 
                                      IStrategoTerm i_30 = null;
                                      IStrategoTerm j_30 = null;
                                      i_30 = term.getSubterm(0);
                                      IStrategoTerm arg700 = term.getSubterm(1);
                                      if(arg700.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg700).getConstructor())
                                        break Fail188;
                                      if(arg700.getSubterm(0) != i_30 && !i_30.match(arg700.getSubterm(0)))
                                        break Fail188;
                                      IStrategoTerm arg701 = arg700.getSubterm(1);
                                      if(arg701.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg701).getConstructor())
                                        break Fail188;
                                      j_30 = arg701.getSubterm(0);
                                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{Normalise.constInt1, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_30})});
                                      if(true)
                                        break Success163;
                                    }
                                    term = term321;
                                  }
                                  Success164:
                                  { 
                                    if(cons27 == Normalise._consDiv_2)
                                    { 
                                      Fail189:
                                      { 
                                        IStrategoTerm f_30 = null;
                                        IStrategoTerm g_30 = null;
                                        IStrategoTerm h_30 = null;
                                        IStrategoTerm arg702 = term.getSubterm(0);
                                        if(arg702.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg702).getConstructor())
                                          break Fail189;
                                        f_30 = arg702.getSubterm(0);
                                        IStrategoTerm arg703 = arg702.getSubterm(1);
                                        if(arg703.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg703).getConstructor())
                                          break Fail189;
                                        g_30 = arg703.getSubterm(0);
                                        IStrategoTerm arg704 = term.getSubterm(1);
                                        if(arg704.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg704).getConstructor())
                                          break Fail189;
                                        if(arg704.getSubterm(0) != f_30 && !f_30.match(arg704.getSubterm(0)))
                                          break Fail189;
                                        IStrategoTerm arg705 = arg704.getSubterm(1);
                                        if(arg705.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg705).getConstructor())
                                          break Fail189;
                                        h_30 = arg705.getSubterm(0);
                                        term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_30}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{h_30})});
                                        if(true)
                                          break Success164;
                                      }
                                      term = term321;
                                    }
                                    Success165:
                                    { 
                                      if(cons27 == Normalise._consDiv_2)
                                      { 
                                        Fail190:
                                        { 
                                          IStrategoTerm b_30 = null;
                                          IStrategoTerm c_30 = null;
                                          IStrategoTerm arg706 = term.getSubterm(0);
                                          if(arg706.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg706).getConstructor())
                                            break Fail190;
                                          b_30 = arg706.getSubterm(0);
                                          IStrategoTerm arg707 = term.getSubterm(1);
                                          if(arg707.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg707).getConstructor())
                                            break Fail190;
                                          c_30 = arg707.getSubterm(0);
                                          term = termFactory.makeTuple(b_30, c_30);
                                          term = div$S_0_0.instance.invoke(context, term);
                                          if(term == null)
                                            break Fail190;
                                          term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                                          if(true)
                                            break Success165;
                                        }
                                        term = term321;
                                      }
                                      Success166:
                                      { 
                                        if(cons27 == Normalise._consDiv_2)
                                        { 
                                          Fail191:
                                          { 
                                            IStrategoTerm w_29 = null;
                                            IStrategoTerm x_29 = null;
                                            IStrategoTerm y_29 = null;
                                            IStrategoTerm arg708 = term.getSubterm(0);
                                            if(arg708.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg708).getConstructor())
                                              break Fail191;
                                            w_29 = arg708.getSubterm(0);
                                            IStrategoTerm arg709 = arg708.getSubterm(1);
                                            if(arg709.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg709).getConstructor())
                                              break Fail191;
                                            x_29 = arg709.getSubterm(0);
                                            IStrategoTerm arg710 = term.getSubterm(1);
                                            if(arg710.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg710).getConstructor())
                                              break Fail191;
                                            y_29 = arg710.getSubterm(0);
                                            term = termFactory.makeTuple(x_29, y_29);
                                            term = mul$S_0_0.instance.invoke(context, term);
                                            if(term == null)
                                              break Fail191;
                                            term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{w_29, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                            if(true)
                                              break Success166;
                                          }
                                          term = term321;
                                        }
                                        Success167:
                                        { 
                                          if(cons27 == Normalise._consMod_2)
                                          { 
                                            Fail192:
                                            { 
                                              IStrategoTerm s_29 = null;
                                              IStrategoTerm t_29 = null;
                                              IStrategoTerm arg711 = term.getSubterm(0);
                                              if(arg711.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg711).getConstructor())
                                                break Fail192;
                                              s_29 = arg711.getSubterm(0);
                                              IStrategoTerm arg712 = term.getSubterm(1);
                                              if(arg712.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg712).getConstructor())
                                                break Fail192;
                                              t_29 = arg712.getSubterm(0);
                                              term = termFactory.makeTuple(s_29, t_29);
                                              term = mod$S_0_0.instance.invoke(context, term);
                                              if(term == null)
                                                break Fail192;
                                              term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                                              if(true)
                                                break Success167;
                                            }
                                            term = term321;
                                          }
                                          Success168:
                                          { 
                                            if(cons27 == Normalise._consLt_2)
                                            { 
                                              Fail193:
                                              { 
                                                IStrategoTerm q_29 = null;
                                                IStrategoTerm r_29 = null;
                                                IStrategoTerm arg713 = term.getSubterm(0);
                                                if(arg713.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg713).getConstructor())
                                                  break Fail193;
                                                q_29 = arg713.getSubterm(0);
                                                IStrategoTerm arg714 = term.getSubterm(1);
                                                if(arg714.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg714).getConstructor())
                                                  break Fail193;
                                                r_29 = arg714.getSubterm(0);
                                                term = termFactory.makeTuple(q_29, r_29);
                                                term = compare_1_0.instance.invoke(context, term, lt$S_0_0.instance);
                                                if(term == null)
                                                  break Fail193;
                                                if(true)
                                                  break Success168;
                                              }
                                              term = term321;
                                            }
                                            Success169:
                                            { 
                                              if(cons27 == Normalise._consGt_2)
                                              { 
                                                Fail194:
                                                { 
                                                  IStrategoTerm o_29 = null;
                                                  IStrategoTerm p_29 = null;
                                                  IStrategoTerm arg715 = term.getSubterm(0);
                                                  if(arg715.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg715).getConstructor())
                                                    break Fail194;
                                                  o_29 = arg715.getSubterm(0);
                                                  IStrategoTerm arg716 = term.getSubterm(1);
                                                  if(arg716.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg716).getConstructor())
                                                    break Fail194;
                                                  p_29 = arg716.getSubterm(0);
                                                  term = termFactory.makeTuple(o_29, p_29);
                                                  term = compare_1_0.instance.invoke(context, term, gt$S_0_0.instance);
                                                  if(term == null)
                                                    break Fail194;
                                                  if(true)
                                                    break Success169;
                                                }
                                                term = term321;
                                              }
                                              Success170:
                                              { 
                                                if(cons27 == Normalise._consLeq_2)
                                                { 
                                                  Fail195:
                                                  { 
                                                    IStrategoTerm m_29 = null;
                                                    IStrategoTerm n_29 = null;
                                                    IStrategoTerm arg717 = term.getSubterm(0);
                                                    if(arg717.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg717).getConstructor())
                                                      break Fail195;
                                                    m_29 = arg717.getSubterm(0);
                                                    IStrategoTerm arg718 = term.getSubterm(1);
                                                    if(arg718.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg718).getConstructor())
                                                      break Fail195;
                                                    n_29 = arg718.getSubterm(0);
                                                    term = termFactory.makeTuple(m_29, n_29);
                                                    term = compare_1_0.instance.invoke(context, term, leq$S_0_0.instance);
                                                    if(term == null)
                                                      break Fail195;
                                                    if(true)
                                                      break Success170;
                                                  }
                                                  term = term321;
                                                }
                                                Success171:
                                                { 
                                                  if(cons27 == Normalise._consGeq_2)
                                                  { 
                                                    Fail196:
                                                    { 
                                                      IStrategoTerm k_29 = null;
                                                      IStrategoTerm l_29 = null;
                                                      IStrategoTerm arg719 = term.getSubterm(0);
                                                      if(arg719.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg719).getConstructor())
                                                        break Fail196;
                                                      k_29 = arg719.getSubterm(0);
                                                      IStrategoTerm arg720 = term.getSubterm(1);
                                                      if(arg720.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg720).getConstructor())
                                                        break Fail196;
                                                      l_29 = arg720.getSubterm(0);
                                                      term = termFactory.makeTuple(k_29, l_29);
                                                      term = compare_1_0.instance.invoke(context, term, geq$S_0_0.instance);
                                                      if(term == null)
                                                        break Fail196;
                                                      if(true)
                                                        break Success171;
                                                    }
                                                    term = term321;
                                                  }
                                                  Success172:
                                                  { 
                                                    if(cons27 == Normalise._consEqu_2)
                                                    { 
                                                      Fail197:
                                                      { 
                                                        IStrategoTerm i_29 = null;
                                                        IStrategoTerm j_29 = null;
                                                        IStrategoTerm arg721 = term.getSubterm(0);
                                                        if(arg721.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg721).getConstructor())
                                                          break Fail197;
                                                        i_29 = arg721.getSubterm(0);
                                                        IStrategoTerm arg722 = term.getSubterm(1);
                                                        if(arg722.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg722).getConstructor())
                                                          break Fail197;
                                                        j_29 = arg722.getSubterm(0);
                                                        term = termFactory.makeTuple(i_29, j_29);
                                                        term = compare_1_0.instance.invoke(context, term, eq_0_0.instance);
                                                        if(term == null)
                                                          break Fail197;
                                                        if(true)
                                                          break Success172;
                                                      }
                                                      term = term321;
                                                    }
                                                    Success173:
                                                    { 
                                                      if(cons27 == Normalise._consNeq_2)
                                                      { 
                                                        Fail198:
                                                        { 
                                                          IStrategoTerm g_29 = null;
                                                          IStrategoTerm h_29 = null;
                                                          IStrategoTerm arg723 = term.getSubterm(0);
                                                          if(arg723.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg723).getConstructor())
                                                            break Fail198;
                                                          g_29 = arg723.getSubterm(0);
                                                          IStrategoTerm arg724 = term.getSubterm(1);
                                                          if(arg724.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg724).getConstructor())
                                                            break Fail198;
                                                          h_29 = arg724.getSubterm(0);
                                                          term = termFactory.makeTuple(g_29, h_29);
                                                          term = compare_1_0.instance.invoke(context, term, lifted19.instance);
                                                          if(term == null)
                                                            break Fail198;
                                                          if(true)
                                                            break Success173;
                                                        }
                                                        term = term321;
                                                      }
                                                      Success174:
                                                      { 
                                                        if(cons27 == Normalise._consDiv_2)
                                                        { 
                                                          Fail199:
                                                          { 
                                                            IStrategoTerm f_29 = null;
                                                            f_29 = term.getSubterm(0);
                                                            IStrategoTerm arg725 = term.getSubterm(1);
                                                            if(arg725.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg725).getConstructor())
                                                              break Fail199;
                                                            IStrategoTerm arg726 = arg725.getSubterm(0);
                                                            if(arg726.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)arg726).stringValue()))
                                                              break Fail199;
                                                            term = f_29;
                                                            if(true)
                                                              break Success174;
                                                          }
                                                          term = term321;
                                                        }
                                                        Success175:
                                                        { 
                                                          if(cons27 == Normalise._consMul_2)
                                                          { 
                                                            Fail200:
                                                            { 
                                                              IStrategoTerm arg727 = term.getSubterm(1);
                                                              if(arg727.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg727).getConstructor())
                                                                break Fail200;
                                                              IStrategoTerm arg728 = arg727.getSubterm(0);
                                                              if(arg728.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg728).stringValue()))
                                                                break Fail200;
                                                              term = Normalise.constInt2;
                                                              if(true)
                                                                break Success175;
                                                            }
                                                            term = term321;
                                                          }
                                                          Success176:
                                                          { 
                                                            if(cons27 == Normalise._consMul_2)
                                                            { 
                                                              Fail201:
                                                              { 
                                                                IStrategoTerm arg729 = term.getSubterm(0);
                                                                if(arg729.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg729).getConstructor())
                                                                  break Fail201;
                                                                IStrategoTerm arg730 = arg729.getSubterm(0);
                                                                if(arg730.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg730).stringValue()))
                                                                  break Fail201;
                                                                term = Normalise.constInt2;
                                                                if(true)
                                                                  break Success176;
                                                              }
                                                              term = term321;
                                                            }
                                                            Success177:
                                                            { 
                                                              if(cons27 == Normalise._consDiv_2)
                                                              { 
                                                                Fail202:
                                                                { 
                                                                  IStrategoTerm arg731 = term.getSubterm(0);
                                                                  if(arg731.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg731).getConstructor())
                                                                    break Fail202;
                                                                  IStrategoTerm arg732 = arg731.getSubterm(0);
                                                                  if(arg732.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg732).stringValue()))
                                                                    break Fail202;
                                                                  term = Normalise.constInt2;
                                                                  if(true)
                                                                    break Success177;
                                                                }
                                                                term = term321;
                                                              }
                                                              Success178:
                                                              { 
                                                                if(cons27 == Normalise._consOr_2)
                                                                { 
                                                                  Fail203:
                                                                  { 
                                                                    IStrategoTerm arg733 = term.getSubterm(0);
                                                                    if(arg733.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg733).getConstructor())
                                                                      break Fail203;
                                                                    term = Normalise.constTrue0;
                                                                    if(true)
                                                                      break Success178;
                                                                  }
                                                                  term = term321;
                                                                }
                                                                Success179:
                                                                { 
                                                                  if(cons27 == Normalise._consOr_2)
                                                                  { 
                                                                    Fail204:
                                                                    { 
                                                                      IStrategoTerm arg734 = term.getSubterm(1);
                                                                      if(arg734.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg734).getConstructor())
                                                                        break Fail204;
                                                                      term = Normalise.constTrue0;
                                                                      if(true)
                                                                        break Success179;
                                                                    }
                                                                    term = term321;
                                                                  }
                                                                  Success180:
                                                                  { 
                                                                    if(cons27 == Normalise._consOr_2)
                                                                    { 
                                                                      Fail205:
                                                                      { 
                                                                        IStrategoTerm z_28 = null;
                                                                        z_28 = term.getSubterm(0);
                                                                        IStrategoTerm arg735 = term.getSubterm(1);
                                                                        if(arg735.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg735).getConstructor())
                                                                          break Fail205;
                                                                        term = z_28;
                                                                        if(true)
                                                                          break Success180;
                                                                      }
                                                                      term = term321;
                                                                    }
                                                                    Success181:
                                                                    { 
                                                                      if(cons27 == Normalise._consOr_2)
                                                                      { 
                                                                        Fail206:
                                                                        { 
                                                                          IStrategoTerm y_28 = null;
                                                                          IStrategoTerm arg736 = term.getSubterm(0);
                                                                          if(arg736.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg736).getConstructor())
                                                                            break Fail206;
                                                                          y_28 = term.getSubterm(1);
                                                                          term = y_28;
                                                                          if(true)
                                                                            break Success181;
                                                                        }
                                                                        term = term321;
                                                                      }
                                                                      Success182:
                                                                      { 
                                                                        if(cons27 == Normalise._consAnd_2)
                                                                        { 
                                                                          Fail207:
                                                                          { 
                                                                            IStrategoTerm x_28 = null;
                                                                            x_28 = term.getSubterm(0);
                                                                            IStrategoTerm arg737 = term.getSubterm(1);
                                                                            if(arg737.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg737).getConstructor())
                                                                              break Fail207;
                                                                            term = x_28;
                                                                            if(true)
                                                                              break Success182;
                                                                          }
                                                                          term = term321;
                                                                        }
                                                                        Success183:
                                                                        { 
                                                                          if(cons27 == Normalise._consAnd_2)
                                                                          { 
                                                                            Fail208:
                                                                            { 
                                                                              IStrategoTerm w_28 = null;
                                                                              IStrategoTerm arg738 = term.getSubterm(0);
                                                                              if(arg738.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg738).getConstructor())
                                                                                break Fail208;
                                                                              w_28 = term.getSubterm(1);
                                                                              term = w_28;
                                                                              if(true)
                                                                                break Success183;
                                                                            }
                                                                            term = term321;
                                                                          }
                                                                          Success184:
                                                                          { 
                                                                            if(cons27 == Normalise._consAnd_2)
                                                                            { 
                                                                              Fail209:
                                                                              { 
                                                                                IStrategoTerm arg739 = term.getSubterm(1);
                                                                                if(arg739.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg739).getConstructor())
                                                                                  break Fail209;
                                                                                term = Normalise.constFalse0;
                                                                                if(true)
                                                                                  break Success184;
                                                                              }
                                                                              term = term321;
                                                                            }
                                                                            Success185:
                                                                            { 
                                                                              if(cons27 == Normalise._consAnd_2)
                                                                              { 
                                                                                Fail210:
                                                                                { 
                                                                                  IStrategoTerm arg740 = term.getSubterm(0);
                                                                                  if(arg740.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg740).getConstructor())
                                                                                    break Fail210;
                                                                                  term = Normalise.constFalse0;
                                                                                  if(true)
                                                                                    break Success185;
                                                                                }
                                                                                term = term321;
                                                                              }
                                                                              Success186:
                                                                              { 
                                                                                if(cons27 == Normalise._consNot_1)
                                                                                { 
                                                                                  Fail211:
                                                                                  { 
                                                                                    IStrategoTerm arg741 = term.getSubterm(0);
                                                                                    if(arg741.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg741).getConstructor())
                                                                                      break Fail211;
                                                                                    term = Normalise.constFalse0;
                                                                                    if(true)
                                                                                      break Success186;
                                                                                  }
                                                                                  term = term321;
                                                                                }
                                                                                Success187:
                                                                                { 
                                                                                  if(cons27 == Normalise._consNot_1)
                                                                                  { 
                                                                                    Fail212:
                                                                                    { 
                                                                                      IStrategoTerm arg742 = term.getSubterm(0);
                                                                                      if(arg742.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg742).getConstructor())
                                                                                        break Fail212;
                                                                                      term = Normalise.constTrue0;
                                                                                      if(true)
                                                                                        break Success187;
                                                                                    }
                                                                                    term = term321;
                                                                                  }
                                                                                  Success188:
                                                                                  { 
                                                                                    if(cons27 == Normalise._consNot_1)
                                                                                    { 
                                                                                      Fail213:
                                                                                      { 
                                                                                        IStrategoTerm t_28 = null;
                                                                                        IStrategoTerm arg743 = term.getSubterm(0);
                                                                                        if(arg743.getTermType() != IStrategoTerm.APPL || Normalise._consNot_1 != ((IStrategoAppl)arg743).getConstructor())
                                                                                          break Fail213;
                                                                                        t_28 = arg743.getSubterm(0);
                                                                                        term = t_28;
                                                                                        if(true)
                                                                                          break Success188;
                                                                                      }
                                                                                      term = term321;
                                                                                    }
                                                                                    Success189:
                                                                                    { 
                                                                                      if(cons27 == Normalise._consIfElseExp_3)
                                                                                      { 
                                                                                        Fail214:
                                                                                        { 
                                                                                          IStrategoTerm s_28 = null;
                                                                                          IStrategoTerm arg744 = term.getSubterm(0);
                                                                                          if(arg744.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg744).getConstructor())
                                                                                            break Fail214;
                                                                                          s_28 = term.getSubterm(2);
                                                                                          term = s_28;
                                                                                          if(true)
                                                                                            break Success189;
                                                                                        }
                                                                                        term = term321;
                                                                                      }
                                                                                      if(cons27 == Normalise._consIfElseExp_3)
                                                                                      { 
                                                                                        IStrategoTerm q_28 = null;
                                                                                        IStrategoTerm arg745 = term.getSubterm(0);
                                                                                        if(arg745.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg745).getConstructor())
                                                                                          break Fail175;
                                                                                        q_28 = term.getSubterm(1);
                                                                                        term = q_28;
                                                                                      }
                                                                                      else
                                                                                      { 
                                                                                        break Fail175;
                                                                                      }
                                                                                    }
                                                                                  }
                                                                                }
                                                                              }
                                                                            }
                                                                          }
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eval$Neg_0_0 extends Strategy 
  { 
    public static $Eval$Neg_0_0 instance = new $Eval$Neg_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("EvalNeg_0_0");
      Fail215:
      { 
        IStrategoTerm g_32 = null;
        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)term).getConstructor())
          break Fail215;
        IStrategoTerm arg746 = term.getSubterm(0);
        if(arg746.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg746).getConstructor())
          break Fail215;
        g_32 = arg746.getSubterm(0);
        term = termFactory.makeTuple(Normalise.const2, g_32);
        term = subt$S_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail215;
        term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class compare_1_0 extends Strategy 
  { 
    public static compare_1_0 instance = new compare_1_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy k_32)
    { 
      context.push("compare_1_0");
      Fail216:
      { 
        Success190:
        { 
          Fail217:
          { 
            IStrategoTerm j_32 = null;
            j_32 = term;
            term = k_32.invoke(context, term);
            if(term == null)
              break Fail217;
            term = j_32;
            { 
              term = Normalise.constTrue0;
              if(true)
                break Success190;
            }
          }
          term = Normalise.constFalse0;
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eval$Add0_0_0 extends Strategy 
  { 
    public static $Eval$Add0_0_0 instance = new $Eval$Add0_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail218:
      { 
        IStrategoTerm term362 = term;
        IStrategoConstructor cons28 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success191:
        { 
          if(cons28 == Normalise._consAdd_2)
          { 
            Fail219:
            { 
              IStrategoTerm m_32 = null;
              m_32 = term.getSubterm(0);
              IStrategoTerm arg747 = term.getSubterm(1);
              if(arg747.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg747).getConstructor())
                break Fail219;
              IStrategoTerm arg748 = arg747.getSubterm(0);
              if(arg748.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg748).stringValue()))
                break Fail219;
              term = m_32;
              if(true)
                break Success191;
            }
            term = term362;
          }
          if(cons28 == Normalise._consAdd_2)
          { 
            IStrategoTerm l_32 = null;
            IStrategoTerm arg749 = term.getSubterm(0);
            if(arg749.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg749).getConstructor())
              break Fail218;
            IStrategoTerm arg750 = arg749.getSubterm(0);
            if(arg750.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg750).stringValue()))
              break Fail218;
            l_32 = term.getSubterm(1);
            term = l_32;
          }
          else
          { 
            break Fail218;
          }
        }
        if(true)
          return term;
      }
      context.push("EvalAdd0_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eval$Known$True_0_0 extends Strategy 
  { 
    public static $Eval$Known$True_0_0 instance = new $Eval$Known$True_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail220:
      { 
        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consKnown_1 != ((IStrategoAppl)term).getConstructor())
          break Fail220;
        IStrategoTerm arg751 = term.getSubterm(0);
        if(arg751.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg751).getConstructor())
          break Fail220;
        term = Normalise.constTrue0;
        if(true)
          return term;
      }
      context.push("EvalKnownTrue_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eval$Known$Other_0_0 extends Strategy 
  { 
    public static $Eval$Known$Other_0_0 instance = new $Eval$Known$Other_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail221:
      { 
        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consKnown_1 != ((IStrategoAppl)term).getConstructor())
          break Fail221;
        term = Normalise.constFalse0;
        if(true)
          return term;
      }
      context.push("EvalKnownOther_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Mul$Abs_0_0 extends Strategy 
  { 
    public static $Mul$Abs_0_0 instance = new $Mul$Abs_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("MulAbs_0_0");
      Fail222:
      { 
        IStrategoTerm o_32 = null;
        IStrategoTerm p_32 = null;
        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
          break Fail222;
        o_32 = term.getSubterm(0);
        IStrategoTerm arg752 = term.getSubterm(1);
        if(arg752.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg752).getConstructor())
          break Fail222;
        p_32 = arg752.getSubterm(0);
        term = termFactory.makeTuple(p_32, Normalise.const2);
        term = lt$S_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail222;
        term = termFactory.makeTuple(Normalise.const2, p_32);
        term = subt$S_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail222;
        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{o_32}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Sort$Mul_0_0 extends Strategy 
  { 
    public static $Sort$Mul_0_0 instance = new $Sort$Mul_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      context.push("SortMul_0_0");
      Fail223:
      { 
        IStrategoTerm term363 = term;
        IStrategoConstructor cons29 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success192:
        { 
          if(cons29 == Normalise._consAdd_2)
          { 
            Fail224:
            { 
              IStrategoTerm y_32 = null;
              IStrategoTerm z_32 = null;
              IStrategoTerm a_33 = null;
              IStrategoTerm b_33 = null;
              IStrategoTerm arg753 = term.getSubterm(0);
              if(arg753.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg753).getConstructor())
                break Fail224;
              z_32 = arg753.getSubterm(0);
              IStrategoTerm arg754 = arg753.getSubterm(1);
              if(arg754.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg754).getConstructor())
                break Fail224;
              b_33 = arg754.getSubterm(0);
              IStrategoTerm arg755 = term.getSubterm(1);
              if(arg755.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg755).getConstructor())
                break Fail224;
              y_32 = arg755.getSubterm(0);
              IStrategoTerm arg756 = arg755.getSubterm(1);
              if(arg756.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg756).getConstructor())
                break Fail224;
              a_33 = arg756.getSubterm(0);
              term = termFactory.makeTuple(a_33, b_33);
              term = lt$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail224;
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{y_32, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_33})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{z_32, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_33})})});
              if(true)
                break Success192;
            }
            term = term363;
          }
          if(cons29 == Normalise._consAdd_2)
          { 
            IStrategoTerm s_32 = null;
            IStrategoTerm t_32 = null;
            IStrategoTerm u_32 = null;
            IStrategoTerm v_32 = null;
            IStrategoTerm w_32 = null;
            IStrategoTerm arg757 = term.getSubterm(0);
            if(arg757.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg757).getConstructor())
              break Fail223;
            s_32 = arg757.getSubterm(0);
            IStrategoTerm arg758 = arg757.getSubterm(1);
            if(arg758.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg758).getConstructor())
              break Fail223;
            u_32 = arg758.getSubterm(0);
            IStrategoTerm arg759 = arg758.getSubterm(1);
            if(arg759.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg759).getConstructor())
              break Fail223;
            w_32 = arg759.getSubterm(0);
            IStrategoTerm arg760 = term.getSubterm(1);
            if(arg760.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg760).getConstructor())
              break Fail223;
            t_32 = arg760.getSubterm(0);
            IStrategoTerm arg761 = arg760.getSubterm(1);
            if(arg761.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg761).getConstructor())
              break Fail223;
            v_32 = arg761.getSubterm(0);
            term = termFactory.makeTuple(v_32, w_32);
            term = lt$S_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail223;
            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{s_32, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{t_32, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{v_32})})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{u_32, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{w_32})})});
          }
          else
          { 
            break Fail223;
          }
        }
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Combine$Mul_0_0 extends Strategy 
  { 
    public static $Combine$Mul_0_0 instance = new $Combine$Mul_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail225:
      { 
        IStrategoTerm term364 = term;
        IStrategoConstructor cons30 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success193:
        { 
          if(cons30 == Normalise._consAdd_2)
          { 
            Fail226:
            { 
              IStrategoTerm i_33 = null;
              IStrategoTerm j_33 = null;
              IStrategoTerm k_33 = null;
              IStrategoTerm arg762 = term.getSubterm(0);
              if(arg762.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg762).getConstructor())
                break Fail226;
              i_33 = arg762.getSubterm(0);
              IStrategoTerm arg763 = arg762.getSubterm(1);
              if(arg763.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg763).getConstructor())
                break Fail226;
              k_33 = arg763.getSubterm(0);
              IStrategoTerm arg764 = term.getSubterm(1);
              if(arg764.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg764).getConstructor())
                break Fail226;
              j_33 = arg764.getSubterm(0);
              IStrategoTerm arg765 = arg764.getSubterm(1);
              if(arg765.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg765).getConstructor())
                break Fail226;
              if(arg765.getSubterm(0) != k_33 && !k_33.match(arg765.getSubterm(0)))
                break Fail226;
              term = k_33;
              IStrategoTerm term365 = term;
              Success194:
              { 
                Fail227:
                { 
                  if(term.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)term).stringValue()))
                    break Fail227;
                  { 
                    if(true)
                      break Fail226;
                    if(true)
                      break Success194;
                  }
                }
                term = term365;
              }
              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{i_33, j_33}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{k_33})});
              if(true)
                break Success193;
            }
            term = term364;
          }
          if(cons30 == Normalise._consAdd_2)
          { 
            IStrategoTerm d_33 = null;
            IStrategoTerm e_33 = null;
            IStrategoTerm f_33 = null;
            IStrategoTerm g_33 = null;
            IStrategoTerm arg766 = term.getSubterm(0);
            if(arg766.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg766).getConstructor())
              break Fail225;
            d_33 = arg766.getSubterm(0);
            IStrategoTerm arg767 = arg766.getSubterm(1);
            if(arg767.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg767).getConstructor())
              break Fail225;
            e_33 = arg767.getSubterm(0);
            IStrategoTerm arg768 = arg767.getSubterm(1);
            if(arg768.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg768).getConstructor())
              break Fail225;
            g_33 = arg768.getSubterm(0);
            IStrategoTerm arg769 = term.getSubterm(1);
            if(arg769.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg769).getConstructor())
              break Fail225;
            f_33 = arg769.getSubterm(0);
            IStrategoTerm arg770 = arg769.getSubterm(1);
            if(arg770.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg770).getConstructor())
              break Fail225;
            if(arg770.getSubterm(0) != g_33 && !g_33.match(arg770.getSubterm(0)))
              break Fail225;
            term = g_33;
            IStrategoTerm term366 = term;
            Success195:
            { 
              Fail228:
              { 
                if(term.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)term).stringValue()))
                  break Fail228;
                { 
                  if(true)
                    break Fail225;
                  if(true)
                    break Success195;
                }
              }
              term = term366;
            }
            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_33, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{e_33, f_33}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_33})})});
          }
          else
          { 
            break Fail225;
          }
        }
        if(true)
          return term;
      }
      context.push("CombineMul_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class $Eliminate$Mul1_0_0 extends Strategy 
  { 
    public static $Eliminate$Mul1_0_0 instance = new $Eliminate$Mul1_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail229:
      { 
        IStrategoTerm term367 = term;
        IStrategoConstructor cons31 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success196:
        { 
          if(cons31 == Normalise._consMul_2)
          { 
            Fail230:
            { 
              IStrategoTerm n_33 = null;
              n_33 = term.getSubterm(0);
              IStrategoTerm arg771 = term.getSubterm(1);
              if(arg771.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg771).getConstructor())
                break Fail230;
              IStrategoTerm arg772 = arg771.getSubterm(0);
              if(arg772.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)arg772).stringValue()))
                break Fail230;
              term = n_33;
              if(true)
                break Success196;
            }
            term = term367;
          }
          if(cons31 == Normalise._consMul_2)
          { 
            IStrategoTerm m_33 = null;
            m_33 = term.getSubterm(0);
            IStrategoTerm arg773 = term.getSubterm(1);
            if(arg773.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg773).getConstructor())
              break Fail229;
            IStrategoTerm arg774 = arg773.getSubterm(0);
            if(arg774.getTermType() != IStrategoTerm.STRING || !"-1".equals(((IStrategoString)arg774).stringValue()))
              break Fail229;
            term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{m_33});
          }
          else
          { 
            break Fail229;
          }
        }
        if(true)
          return term;
      }
      context.push("EliminateMul1_0_0");
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") public static class main_0_0 extends Strategy 
  { 
    public static main_0_0 instance = new main_0_0();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      context.push("main_0_0");
      Fail231:
      { 
        term = io_$Normalise_0_0.instance.invoke(context, term);
        if(term == null)
          break Fail231;
        context.popOnSuccess();
        if(true)
          return term;
      }
      context.popOnFailure();
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted19 extends Strategy 
  { 
    public static final lifted19 instance = new lifted19();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail232:
      { 
        IStrategoTerm term344 = term;
        Success197:
        { 
          Fail233:
          { 
            term = eq_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail233;
            { 
              if(true)
                break Fail232;
              if(true)
                break Success197;
            }
          }
          term = term344;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class f_202 extends Strategy 
  { 
    public static final f_202 instance = new f_202();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy h_202)
    { 
      Fail234:
      { 
        lifted12 lifted120 = new lifted12();
        lifted120.h_202 = h_202;
        term = SRTS_all.instance.invoke(context, term, lifted120);
        if(term == null)
          break Fail234;
        term = h_202.invoke(context, term);
        if(term == null)
          break Fail234;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted12 extends Strategy 
  { 
    Strategy h_202;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail235:
      { 
        term = f_202.instance.invoke(context, term, h_202);
        if(term == null)
          break Fail235;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class q_200 extends Strategy 
  { 
    public static final q_200 instance = new q_200();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail236:
      { 
        IStrategoTerm term170 = term;
        Success198:
        { 
          Fail237:
          { 
            IStrategoTerm term171 = term;
            IStrategoConstructor cons32 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success199:
            { 
              if(cons32 == Normalise._consAdd_2)
              { 
                Fail238:
                { 
                  IStrategoTerm a_200 = null;
                  IStrategoTerm b_200 = null;
                  IStrategoTerm e_200 = null;
                  IStrategoTerm f_200 = null;
                  IStrategoTerm arg356 = term.getSubterm(0);
                  if(arg356.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg356).getConstructor())
                    break Fail238;
                  b_200 = arg356.getSubterm(0);
                  IStrategoTerm arg357 = arg356.getSubterm(1);
                  if(arg357.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg357).getConstructor())
                    break Fail238;
                  f_200 = arg357.getSubterm(0);
                  IStrategoTerm arg358 = term.getSubterm(1);
                  if(arg358.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg358).getConstructor())
                    break Fail238;
                  a_200 = arg358.getSubterm(0);
                  IStrategoTerm arg359 = arg358.getSubterm(1);
                  if(arg359.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg359).getConstructor())
                    break Fail238;
                  e_200 = arg359.getSubterm(0);
                  term = termFactory.makeTuple(e_200, f_200);
                  term = lt$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail238;
                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{a_200, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_200})}), termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{b_200, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{f_200})})});
                  term = this.invoke(context, term);
                  if(term == null)
                    break Fail238;
                  if(true)
                    break Success199;
                }
                term = term171;
              }
              if(cons32 == Normalise._consAdd_2)
              { 
                IStrategoTerm h_200 = null;
                IStrategoTerm i_200 = null;
                IStrategoTerm j_200 = null;
                IStrategoTerm k_200 = null;
                IStrategoTerm l_200 = null;
                IStrategoTerm arg360 = term.getSubterm(0);
                if(arg360.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg360).getConstructor())
                  break Fail237;
                h_200 = arg360.getSubterm(0);
                IStrategoTerm arg361 = arg360.getSubterm(1);
                if(arg361.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg361).getConstructor())
                  break Fail237;
                j_200 = arg361.getSubterm(0);
                IStrategoTerm arg362 = arg361.getSubterm(1);
                if(arg362.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg362).getConstructor())
                  break Fail237;
                l_200 = arg362.getSubterm(0);
                IStrategoTerm arg363 = term.getSubterm(1);
                if(arg363.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg363).getConstructor())
                  break Fail237;
                i_200 = arg363.getSubterm(0);
                IStrategoTerm arg364 = arg363.getSubterm(1);
                if(arg364.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg364).getConstructor())
                  break Fail237;
                k_200 = arg364.getSubterm(0);
                term = termFactory.makeTuple(k_200, l_200);
                term = lt$S_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail237;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{h_200, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{i_200, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{k_200})})});
                term = this.invoke(context, term);
                if(term == null)
                  break Fail237;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{j_200, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_200})})});
                term = this.invoke(context, term);
                if(term == null)
                  break Fail237;
              }
              else
              { 
                break Fail237;
              }
            }
            if(true)
              break Success198;
          }
          term = term170;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class p_200 extends Strategy 
  { 
    public static final p_200 instance = new p_200();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy r_200)
    { 
      Fail239:
      { 
        lifted10 lifted100 = new lifted10();
        lifted100.r_200 = r_200;
        term = SRTS_all.instance.invoke(context, term, lifted100);
        if(term == null)
          break Fail239;
        term = r_200.invoke(context, term);
        if(term == null)
          break Fail239;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted10 extends Strategy 
  { 
    Strategy r_200;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail240:
      { 
        term = p_200.instance.invoke(context, term, r_200);
        if(term == null)
          break Fail240;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class k_199 extends Strategy 
  { 
    public static final k_199 instance = new k_199();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail241:
      { 
        IStrategoTerm term169 = term;
        Success200:
        { 
          Fail242:
          { 
            IStrategoTerm b_199 = null;
            IStrategoTerm c_199 = null;
            IStrategoTerm d_199 = null;
            if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
              break Fail242;
            b_199 = term.getSubterm(0);
            IStrategoTerm arg355 = term.getSubterm(1);
            if(arg355.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg355).getConstructor())
              break Fail242;
            c_199 = arg355.getSubterm(0);
            term = termFactory.makeTuple(c_199, Normalise.const2);
            term = lt$S_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail242;
            term = termFactory.makeTuple(Normalise.const2, c_199);
            term = subt$S_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail242;
            d_199 = term;
            term = j_199.instance.invoke(context, d_199, this);
            if(term == null)
              break Fail242;
            term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{b_199}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
            term = this.invoke(context, term);
            if(term == null)
              break Fail242;
            if(true)
              break Success200;
          }
          term = term169;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class j_199 extends Strategy 
  { 
    public static final j_199 instance = new j_199();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy l_199)
    { 
      Fail243:
      { 
        lifted9 lifted90 = new lifted9();
        lifted90.l_199 = l_199;
        term = SRTS_all.instance.invoke(context, term, lifted90);
        if(term == null)
          break Fail243;
        term = l_199.invoke(context, term);
        if(term == null)
          break Fail243;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted9 extends Strategy 
  { 
    Strategy l_199;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail244:
      { 
        term = j_199.instance.invoke(context, term, l_199);
        if(term == null)
          break Fail244;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class x_201 extends Strategy 
  { 
    public static final x_201 instance = new x_201();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail245:
      { 
        IStrategoTerm term165 = term;
        Success201:
        { 
          Fail246:
          { 
            IStrategoTerm term166 = term;
            IStrategoConstructor cons34 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success202:
            { 
              if(cons34 == Normalise._consAdd_2)
              { 
                Fail247:
                { 
                  IStrategoTerm g_201 = null;
                  IStrategoTerm h_201 = null;
                  IStrategoTerm j_201 = null;
                  IStrategoTerm arg346 = term.getSubterm(0);
                  if(arg346.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg346).getConstructor())
                    break Fail247;
                  g_201 = arg346.getSubterm(0);
                  IStrategoTerm arg347 = arg346.getSubterm(1);
                  if(arg347.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg347).getConstructor())
                    break Fail247;
                  j_201 = arg347.getSubterm(0);
                  IStrategoTerm arg348 = term.getSubterm(1);
                  if(arg348.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg348).getConstructor())
                    break Fail247;
                  h_201 = arg348.getSubterm(0);
                  IStrategoTerm arg349 = arg348.getSubterm(1);
                  if(arg349.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg349).getConstructor())
                    break Fail247;
                  if(arg349.getSubterm(0) != j_201 && !j_201.match(arg349.getSubterm(0)))
                    break Fail247;
                  term = j_201;
                  IStrategoTerm term167 = term;
                  Success203:
                  { 
                    Fail248:
                    { 
                      if(term.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)term).stringValue()))
                        break Fail248;
                      { 
                        if(true)
                          break Fail247;
                        if(true)
                          break Success203;
                      }
                    }
                    term = term167;
                  }
                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{g_201, h_201});
                  term = this.invoke(context, term);
                  if(term == null)
                    break Fail247;
                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_201})});
                  if(true)
                    break Success202;
                }
                term = term166;
              }
              if(cons34 == Normalise._consAdd_2)
              { 
                IStrategoTerm p_201 = null;
                IStrategoTerm q_201 = null;
                IStrategoTerm r_201 = null;
                IStrategoTerm s_201 = null;
                IStrategoTerm arg350 = term.getSubterm(0);
                if(arg350.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg350).getConstructor())
                  break Fail246;
                p_201 = arg350.getSubterm(0);
                IStrategoTerm arg351 = arg350.getSubterm(1);
                if(arg351.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg351).getConstructor())
                  break Fail246;
                q_201 = arg351.getSubterm(0);
                IStrategoTerm arg352 = arg351.getSubterm(1);
                if(arg352.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg352).getConstructor())
                  break Fail246;
                s_201 = arg352.getSubterm(0);
                IStrategoTerm arg353 = term.getSubterm(1);
                if(arg353.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg353).getConstructor())
                  break Fail246;
                r_201 = arg353.getSubterm(0);
                IStrategoTerm arg354 = arg353.getSubterm(1);
                if(arg354.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg354).getConstructor())
                  break Fail246;
                if(arg354.getSubterm(0) != s_201 && !s_201.match(arg354.getSubterm(0)))
                  break Fail246;
                term = s_201;
                IStrategoTerm term168 = term;
                Success204:
                { 
                  Fail249:
                  { 
                    if(term.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)term).stringValue()))
                      break Fail249;
                    { 
                      if(true)
                        break Fail246;
                      if(true)
                        break Success204;
                    }
                  }
                  term = term168;
                }
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{q_201, r_201});
                term = this.invoke(context, term);
                if(term == null)
                  break Fail246;
                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{p_201, termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{s_201})})});
                term = this.invoke(context, term);
                if(term == null)
                  break Fail246;
              }
              else
              { 
                break Fail246;
              }
            }
            if(true)
              break Success201;
          }
          term = term165;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class w_201 extends Strategy 
  { 
    public static final w_201 instance = new w_201();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy y_201)
    { 
      Fail250:
      { 
        lifted11 lifted110 = new lifted11();
        lifted110.y_201 = y_201;
        term = SRTS_all.instance.invoke(context, term, lifted110);
        if(term == null)
          break Fail250;
        term = y_201.invoke(context, term);
        if(term == null)
          break Fail250;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted11 extends Strategy 
  { 
    Strategy y_201;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail251:
      { 
        term = w_201.instance.invoke(context, term, y_201);
        if(term == null)
          break Fail251;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class s_198 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail252:
      { 
        IStrategoTerm term2 = term;
        Success205:
        { 
          Fail253:
          { 
            canonical_0_0_fragment_4 canonical_0_0_fragment_40 = new canonical_0_0_fragment_4();
            canonical_0_0_fragment_40.s_198 = s_198;
            term = canonical_0_0_fragment_40.invoke(context, term);
            if(term == null)
              break Fail253;
            if(true)
              break Success205;
          }
          term = term2;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class canonical_0_0_fragment_4 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail254:
      { 
        IStrategoTerm term3 = term;
        Success206:
        { 
          Fail255:
          { 
            IStrategoTerm term4 = term;
            IStrategoConstructor cons35 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success207:
            { 
              if(cons35 == Normalise._consNot_1)
              { 
                Fail256:
                { 
                  IStrategoTerm d_167 = null;
                  IStrategoTerm e_167 = null;
                  IStrategoTerm f_167 = null;
                  IStrategoTerm arg0 = term.getSubterm(0);
                  if(arg0.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg0).getConstructor())
                    break Fail256;
                  d_167 = arg0.getSubterm(0);
                  e_167 = arg0.getSubterm(1);
                  term = termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{d_167});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail256;
                  f_167 = term;
                  term = termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{e_167});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail256;
                  term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{f_167, term});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail256;
                  if(true)
                    break Success207;
                }
                term = term4;
              }
              Success208:
              { 
                if(cons35 == Normalise._consNot_1)
                { 
                  Fail257:
                  { 
                    IStrategoTerm k_167 = null;
                    IStrategoTerm l_167 = null;
                    IStrategoTerm m_167 = null;
                    IStrategoTerm arg1 = term.getSubterm(0);
                    if(arg1.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg1).getConstructor())
                      break Fail257;
                    k_167 = arg1.getSubterm(0);
                    l_167 = arg1.getSubterm(1);
                    term = termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{k_167});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail257;
                    m_167 = term;
                    term = termFactory.makeAppl(Normalise._consNot_1, new IStrategoTerm[]{l_167});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail257;
                    term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{m_167, term});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail257;
                    if(true)
                      break Success208;
                  }
                  term = term4;
                }
                Success209:
                { 
                  if(cons35 == Normalise._consNot_1)
                  { 
                    Fail258:
                    { 
                      IStrategoTerm q_167 = null;
                      IStrategoTerm s_167 = null;
                      IStrategoTerm arg2 = term.getSubterm(0);
                      if(arg2.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg2).getConstructor())
                        break Fail258;
                      q_167 = arg2.getSubterm(0);
                      s_167 = arg2.getSubterm(1);
                      term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{q_167, s_167});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail258;
                      if(true)
                        break Success209;
                    }
                    term = term4;
                  }
                  Success210:
                  { 
                    if(cons35 == Normalise._consNot_1)
                    { 
                      Fail259:
                      { 
                        IStrategoTerm t_167 = null;
                        IStrategoTerm u_167 = null;
                        IStrategoTerm arg3 = term.getSubterm(0);
                        if(arg3.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg3).getConstructor())
                          break Fail259;
                        t_167 = arg3.getSubterm(0);
                        u_167 = arg3.getSubterm(1);
                        term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{t_167, u_167});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail259;
                        if(true)
                          break Success210;
                      }
                      term = term4;
                    }
                    Success211:
                    { 
                      if(cons35 == Normalise._consNot_1)
                      { 
                        Fail260:
                        { 
                          IStrategoTerm v_167 = null;
                          IStrategoTerm w_167 = null;
                          IStrategoTerm arg4 = term.getSubterm(0);
                          if(arg4.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg4).getConstructor())
                            break Fail260;
                          v_167 = arg4.getSubterm(0);
                          w_167 = arg4.getSubterm(1);
                          term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{v_167, w_167});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail260;
                          if(true)
                            break Success211;
                        }
                        term = term4;
                      }
                      Success212:
                      { 
                        if(cons35 == Normalise._consNot_1)
                        { 
                          Fail261:
                          { 
                            IStrategoTerm x_167 = null;
                            IStrategoTerm y_167 = null;
                            IStrategoTerm arg5 = term.getSubterm(0);
                            if(arg5.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg5).getConstructor())
                              break Fail261;
                            x_167 = arg5.getSubterm(0);
                            y_167 = arg5.getSubterm(1);
                            term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{x_167, y_167});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail261;
                            if(true)
                              break Success212;
                          }
                          term = term4;
                        }
                        Success213:
                        { 
                          if(cons35 == Normalise._consNot_1)
                          { 
                            Fail262:
                            { 
                              IStrategoTerm z_167 = null;
                              IStrategoTerm a_168 = null;
                              IStrategoTerm arg6 = term.getSubterm(0);
                              if(arg6.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg6).getConstructor())
                                break Fail262;
                              z_167 = arg6.getSubterm(0);
                              a_168 = arg6.getSubterm(1);
                              term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{z_167, a_168});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail262;
                              if(true)
                                break Success213;
                            }
                            term = term4;
                          }
                          if(cons35 == Normalise._consNot_1)
                          { 
                            IStrategoTerm b_168 = null;
                            IStrategoTerm c_168 = null;
                            IStrategoTerm arg7 = term.getSubterm(0);
                            if(arg7.getTermType() != IStrategoTerm.APPL || Normalise._consNeq_2 != ((IStrategoAppl)arg7).getConstructor())
                              break Fail255;
                            b_168 = arg7.getSubterm(0);
                            c_168 = arg7.getSubterm(1);
                            term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{b_168, c_168});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail255;
                          }
                          else
                          { 
                            break Fail255;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if(true)
              break Success206;
          }
          term = term3;
          IStrategoTerm term11 = term;
          Success214:
          { 
            Fail263:
            { 
              IStrategoTerm term12 = term;
              IStrategoConstructor cons36 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
              Success215:
              { 
                if(cons36 == Normalise._consSub_2)
                { 
                  Fail264:
                  { 
                    IStrategoTerm d_168 = null;
                    IStrategoTerm e_168 = null;
                    d_168 = term.getSubterm(0);
                    e_168 = term.getSubterm(1);
                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{e_168, Normalise.constInt0});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail264;
                    term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_168, term});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail264;
                    if(true)
                      break Success215;
                  }
                  term = term12;
                }
                if(cons36 == Normalise._consNeg_1)
                { 
                  IStrategoTerm h_168 = null;
                  h_168 = term.getSubterm(0);
                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{h_168, Normalise.constInt0});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail263;
                }
                else
                { 
                  break Fail263;
                }
              }
              if(true)
                break Success214;
            }
            term = term11;
            IStrategoTerm term13 = term;
            Success216:
            { 
              Fail265:
              { 
                IStrategoTerm term14 = term;
                IStrategoConstructor cons37 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
                Success217:
                { 
                  if(cons37 == Normalise._consAdd_2)
                  { 
                    Fail266:
                    { 
                      IStrategoTerm i_168 = null;
                      i_168 = term.getSubterm(0);
                      IStrategoTerm arg8 = term.getSubterm(1);
                      if(arg8.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg8).getConstructor())
                        break Fail266;
                      IStrategoTerm arg9 = arg8.getSubterm(0);
                      if(arg9.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg9).stringValue()))
                        break Fail266;
                      term = i_168;
                      if(true)
                        break Success217;
                    }
                    term = term14;
                  }
                  if(cons37 == Normalise._consAdd_2)
                  { 
                    IStrategoTerm j_168 = null;
                    IStrategoTerm arg10 = term.getSubterm(0);
                    if(arg10.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg10).getConstructor())
                      break Fail265;
                    IStrategoTerm arg11 = arg10.getSubterm(0);
                    if(arg11.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg11).stringValue()))
                      break Fail265;
                    j_168 = term.getSubterm(1);
                    term = j_168;
                  }
                  else
                  { 
                    break Fail265;
                  }
                }
                if(true)
                  break Success216;
              }
              term = term13;
              IStrategoTerm term15 = term;
              Success218:
              { 
                Fail267:
                { 
                  IStrategoTerm k_168 = null;
                  IStrategoTerm l_168 = null;
                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consNeg_1 != ((IStrategoAppl)term).getConstructor())
                    break Fail267;
                  IStrategoTerm arg12 = term.getSubterm(0);
                  if(arg12.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg12).getConstructor())
                    break Fail267;
                  k_168 = arg12.getSubterm(0);
                  term = termFactory.makeTuple(Normalise.const2, k_168);
                  term = subt$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail267;
                  l_168 = term;
                  term = q_198.instance.invoke(context, l_168, s_198);
                  if(term == null)
                    break Fail267;
                  term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                  if(true)
                    break Success218;
                }
                term = term15;
                IStrategoTerm term16 = term;
                Success219:
                { 
                  Fail268:
                  { 
                    IStrategoTerm term17 = term;
                    Success220:
                    { 
                      Fail269:
                      { 
                        IStrategoTerm p_168 = null;
                        IStrategoTerm q_168 = null;
                        IStrategoTerm r_168 = null;
                        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                          break Fail269;
                        IStrategoTerm arg13 = term.getSubterm(0);
                        if(arg13.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg13).getConstructor())
                          break Fail269;
                        p_168 = arg13.getSubterm(0);
                        IStrategoTerm arg14 = term.getSubterm(1);
                        if(arg14.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg14).getConstructor())
                          break Fail269;
                        q_168 = arg14.getSubterm(0);
                        term = termFactory.makeTuple(p_168, q_168);
                        term = add$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail269;
                        r_168 = term;
                        term = q_198.instance.invoke(context, r_168, s_198);
                        if(term == null)
                          break Fail269;
                        term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                        if(true)
                          break Success220;
                      }
                      term = term17;
                      canonical_0_0_fragment_0 canonical_0_0_fragment_00 = new canonical_0_0_fragment_0();
                      canonical_0_0_fragment_00.s_198 = s_198;
                      term = canonical_0_0_fragment_00.invoke(context, term);
                      if(term == null)
                        break Fail268;
                    }
                    if(true)
                      break Success219;
                  }
                  term = term16;
                  IStrategoTerm term57 = term;
                  Success221:
                  { 
                    Fail270:
                    { 
                      IStrategoTerm term58 = term;
                      IStrategoConstructor cons40 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
                      Success222:
                      { 
                        if(cons40 == Normalise._consAdd_2)
                        { 
                          Fail271:
                          { 
                            IStrategoTerm k_174 = null;
                            IStrategoTerm l_174 = null;
                            IStrategoTerm m_174 = null;
                            k_174 = term.getSubterm(0);
                            IStrategoTerm arg91 = term.getSubterm(1);
                            if(arg91.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg91).getConstructor())
                              break Fail271;
                            l_174 = arg91.getSubterm(0);
                            m_174 = arg91.getSubterm(1);
                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{k_174, l_174});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail271;
                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, m_174});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail271;
                            if(true)
                              break Success222;
                          }
                          term = term58;
                        }
                        Success223:
                        { 
                          if(cons40 == Normalise._consMul_2)
                          { 
                            Fail272:
                            { 
                              IStrategoTerm p_174 = null;
                              IStrategoTerm q_174 = null;
                              IStrategoTerm r_174 = null;
                              p_174 = term.getSubterm(0);
                              IStrategoTerm arg92 = term.getSubterm(1);
                              if(arg92.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg92).getConstructor())
                                break Fail272;
                              q_174 = arg92.getSubterm(0);
                              r_174 = arg92.getSubterm(1);
                              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{p_174, q_174});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail272;
                              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{term, r_174});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail272;
                              if(true)
                                break Success223;
                            }
                            term = term58;
                          }
                          Success224:
                          { 
                            if(cons40 == Normalise._consAnd_2)
                            { 
                              Fail273:
                              { 
                                IStrategoTerm u_174 = null;
                                IStrategoTerm v_174 = null;
                                IStrategoTerm w_174 = null;
                                u_174 = term.getSubterm(0);
                                IStrategoTerm arg93 = term.getSubterm(1);
                                if(arg93.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg93).getConstructor())
                                  break Fail273;
                                v_174 = arg93.getSubterm(0);
                                w_174 = arg93.getSubterm(1);
                                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{u_174, v_174});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail273;
                                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{term, w_174});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail273;
                                if(true)
                                  break Success224;
                              }
                              term = term58;
                            }
                            if(cons40 == Normalise._consOr_2)
                            { 
                              IStrategoTerm a_175 = null;
                              IStrategoTerm b_175 = null;
                              IStrategoTerm c_175 = null;
                              a_175 = term.getSubterm(0);
                              IStrategoTerm arg94 = term.getSubterm(1);
                              if(arg94.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg94).getConstructor())
                                break Fail270;
                              b_175 = arg94.getSubterm(0);
                              c_175 = arg94.getSubterm(1);
                              term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{a_175, b_175});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail270;
                              term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{term, c_175});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail270;
                            }
                            else
                            { 
                              break Fail270;
                            }
                          }
                        }
                      }
                      if(true)
                        break Success221;
                    }
                    term = term57;
                    IStrategoTerm term61 = term;
                    Success225:
                    { 
                      Fail274:
                      { 
                        IStrategoTerm term62 = term;
                        IStrategoConstructor cons41 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
                        Success226:
                        { 
                          if(cons41 == Normalise._consAdd_2)
                          { 
                            Fail275:
                            { 
                              IStrategoTerm f_175 = null;
                              IStrategoTerm g_175 = null;
                              IStrategoTerm arg95 = term.getSubterm(0);
                              if(arg95.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg95).getConstructor())
                                break Fail275;
                              g_175 = arg95.getSubterm(0);
                              f_175 = term.getSubterm(1);
                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{f_175, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_175})});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail275;
                              if(true)
                                break Success226;
                            }
                            term = term62;
                          }
                          Success227:
                          { 
                            if(cons41 == Normalise._consAdd_2)
                            { 
                              Fail276:
                              { 
                                IStrategoTerm h_175 = null;
                                IStrategoTerm i_175 = null;
                                IStrategoTerm j_175 = null;
                                IStrategoTerm arg96 = term.getSubterm(0);
                                if(arg96.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg96).getConstructor())
                                  break Fail276;
                                h_175 = arg96.getSubterm(0);
                                IStrategoTerm arg97 = arg96.getSubterm(1);
                                if(arg97.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg97).getConstructor())
                                  break Fail276;
                                j_175 = arg97.getSubterm(0);
                                i_175 = term.getSubterm(1);
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{h_175, i_175});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail276;
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_175})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail276;
                                if(true)
                                  break Success227;
                              }
                              term = term62;
                            }
                            Success228:
                            { 
                              if(cons41 == Normalise._consMul_2)
                              { 
                                Fail277:
                                { 
                                  IStrategoTerm m_175 = null;
                                  IStrategoTerm n_175 = null;
                                  IStrategoTerm arg98 = term.getSubterm(0);
                                  if(arg98.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg98).getConstructor())
                                    break Fail277;
                                  n_175 = arg98.getSubterm(0);
                                  m_175 = term.getSubterm(1);
                                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{m_175, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{n_175})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail277;
                                  if(true)
                                    break Success228;
                                }
                                term = term62;
                              }
                              Success229:
                              { 
                                if(cons41 == Normalise._consMul_2)
                                { 
                                  Fail278:
                                  { 
                                    IStrategoTerm o_175 = null;
                                    IStrategoTerm p_175 = null;
                                    IStrategoTerm q_175 = null;
                                    IStrategoTerm arg99 = term.getSubterm(0);
                                    if(arg99.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg99).getConstructor())
                                      break Fail278;
                                    o_175 = arg99.getSubterm(0);
                                    IStrategoTerm arg100 = arg99.getSubterm(1);
                                    if(arg100.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg100).getConstructor())
                                      break Fail278;
                                    q_175 = arg100.getSubterm(0);
                                    p_175 = term.getSubterm(1);
                                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{o_175, p_175});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail278;
                                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{q_175})});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail278;
                                    if(true)
                                      break Success229;
                                  }
                                  term = term62;
                                }
                                Success230:
                                { 
                                  if(cons41 == Normalise._consDiv_2)
                                  { 
                                    Fail279:
                                    { 
                                      IStrategoTerm t_175 = null;
                                      IStrategoTerm u_175 = null;
                                      IStrategoTerm v_175 = null;
                                      IStrategoTerm arg101 = term.getSubterm(0);
                                      if(arg101.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg101).getConstructor())
                                        break Fail279;
                                      t_175 = arg101.getSubterm(0);
                                      IStrategoTerm arg102 = arg101.getSubterm(1);
                                      if(arg102.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg102).getConstructor())
                                        break Fail279;
                                      v_175 = arg102.getSubterm(0);
                                      u_175 = term.getSubterm(1);
                                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{t_175, u_175});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail279;
                                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{term, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{v_175})});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail279;
                                      if(true)
                                        break Success230;
                                    }
                                    term = term62;
                                  }
                                  Success231:
                                  { 
                                    if(cons41 == Normalise._consMul_2)
                                    { 
                                      Fail280:
                                      { 
                                        IStrategoTerm y_175 = null;
                                        IStrategoTerm z_175 = null;
                                        IStrategoTerm a_176 = null;
                                        IStrategoTerm b_176 = null;
                                        IStrategoTerm arg103 = term.getSubterm(0);
                                        if(arg103.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg103).getConstructor())
                                          break Fail280;
                                        y_175 = arg103.getSubterm(0);
                                        z_175 = arg103.getSubterm(1);
                                        IStrategoTerm arg104 = term.getSubterm(1);
                                        if(arg104.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg104).getConstructor())
                                          break Fail280;
                                        a_176 = arg104.getSubterm(0);
                                        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{y_175, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_176})});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail280;
                                        b_176 = term;
                                        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{z_175, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_176})});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail280;
                                        term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{b_176, term});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail280;
                                        if(true)
                                          break Success231;
                                      }
                                      term = term62;
                                    }
                                    Success232:
                                    { 
                                      if(cons41 == Normalise._consAdd_2)
                                      { 
                                        Fail281:
                                        { 
                                          IStrategoTerm f_176 = null;
                                          IStrategoTerm g_176 = null;
                                          IStrategoTerm h_176 = null;
                                          IStrategoTerm arg105 = term.getSubterm(0);
                                          if(arg105.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg105).getConstructor())
                                            break Fail281;
                                          f_176 = arg105.getSubterm(0);
                                          IStrategoTerm arg106 = arg105.getSubterm(1);
                                          if(arg106.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg106).getConstructor())
                                            break Fail281;
                                          g_176 = arg106.getSubterm(0);
                                          h_176 = term.getSubterm(1);
                                          term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{g_176}), Normalise.constInt1});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail281;
                                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{f_176, term});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail281;
                                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, h_176});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail281;
                                          if(true)
                                            break Success232;
                                        }
                                        term = term62;
                                      }
                                      Success233:
                                      { 
                                        if(cons41 == Normalise._consAdd_2)
                                        { 
                                          Fail282:
                                          { 
                                            IStrategoTerm m_176 = null;
                                            IStrategoTerm n_176 = null;
                                            m_176 = term.getSubterm(0);
                                            IStrategoTerm arg107 = term.getSubterm(1);
                                            if(arg107.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg107).getConstructor())
                                              break Fail282;
                                            n_176 = arg107.getSubterm(0);
                                            term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{n_176}), Normalise.constInt1});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail282;
                                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{m_176, term});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail282;
                                            if(true)
                                              break Success233;
                                          }
                                          term = term62;
                                        }
                                        Success234:
                                        { 
                                          if(cons41 == Normalise._consAdd_2)
                                          { 
                                            Fail283:
                                            { 
                                              IStrategoTerm q_176 = null;
                                              IStrategoTerm w_176 = null;
                                              IStrategoTerm i_177 = null;
                                              w_176 = term.getSubterm(0);
                                              q_176 = term.getSubterm(1);
                                              term = w_176;
                                              IStrategoTerm term71 = term;
                                              Success235:
                                              { 
                                                Fail284:
                                                { 
                                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                    break Fail284;
                                                  { 
                                                    if(true)
                                                      break Fail283;
                                                    if(true)
                                                      break Success235;
                                                  }
                                                }
                                                term = term71;
                                              }
                                              term = w_176;
                                              IStrategoTerm term72 = term;
                                              Success236:
                                              { 
                                                Fail285:
                                                { 
                                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                                    break Fail285;
                                                  IStrategoTerm arg108 = term.getSubterm(1);
                                                  if(arg108.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg108).getConstructor())
                                                    break Fail285;
                                                  { 
                                                    if(true)
                                                      break Fail283;
                                                    if(true)
                                                      break Success236;
                                                  }
                                                }
                                                term = term72;
                                              }
                                              term = w_176;
                                              IStrategoTerm term73 = term;
                                              Success237:
                                              { 
                                                Fail286:
                                                { 
                                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                                                    break Fail286;
                                                  { 
                                                    if(true)
                                                      break Fail283;
                                                    if(true)
                                                      break Success237;
                                                  }
                                                }
                                                term = term73;
                                              }
                                              i_177 = term;
                                              term = get_option_0_1.instance.invoke(context, i_177, Normalise.constMerge_complex_multiply0);
                                              if(term == null)
                                                break Fail283;
                                              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{w_176, Normalise.constInt1});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail283;
                                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, q_176});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail283;
                                              if(true)
                                                break Success234;
                                            }
                                            term = term62;
                                          }
                                          canonical_0_0_fragment_1 canonical_0_0_fragment_10 = new canonical_0_0_fragment_1();
                                          canonical_0_0_fragment_10.s_198 = s_198;
                                          term = canonical_0_0_fragment_10.invoke(context, term);
                                          if(term == null)
                                            break Fail274;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                        if(true)
                          break Success225;
                      }
                      term = term61;
                      IStrategoTerm term107 = term;
                      Success238:
                      { 
                        Fail287:
                        { 
                          IStrategoTerm term108 = term;
                          IStrategoConstructor cons45 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
                          Success239:
                          { 
                            if(cons45 == Normalise._consAdd_2)
                            { 
                              Fail288:
                              { 
                                IStrategoTerm c_184 = null;
                                IStrategoTerm d_184 = null;
                                IStrategoTerm e_184 = null;
                                IStrategoTerm f_184 = null;
                                IStrategoTerm h_184 = null;
                                IStrategoTerm arg134 = term.getSubterm(0);
                                if(arg134.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg134).getConstructor())
                                  break Fail288;
                                IStrategoTerm arg135 = arg134.getSubterm(0);
                                if(arg135.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg135).getConstructor())
                                  break Fail288;
                                e_184 = arg135.getSubterm(0);
                                IStrategoTerm arg136 = arg134.getSubterm(1);
                                if(arg136.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg136).getConstructor())
                                  break Fail288;
                                d_184 = arg136.getSubterm(0);
                                IStrategoTerm arg137 = term.getSubterm(1);
                                if(arg137.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg137).getConstructor())
                                  break Fail288;
                                IStrategoTerm arg138 = arg137.getSubterm(0);
                                if(arg138.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg138).getConstructor())
                                  break Fail288;
                                f_184 = arg138.getSubterm(0);
                                IStrategoTerm arg139 = arg137.getSubterm(1);
                                if(arg139.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg139).getConstructor())
                                  break Fail288;
                                c_184 = arg139.getSubterm(0);
                                term = termFactory.makeTuple(e_184, f_184);
                                term = variable_name_reorder_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail288;
                                term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{f_184}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_184})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail288;
                                h_184 = term;
                                term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{e_184}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{d_184})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail288;
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{h_184, term});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail288;
                                if(true)
                                  break Success239;
                              }
                              term = term108;
                            }
                            Success240:
                            { 
                              if(cons45 == Normalise._consAdd_2)
                              { 
                                Fail289:
                                { 
                                  IStrategoTerm l_184 = null;
                                  IStrategoTerm m_184 = null;
                                  IStrategoTerm n_184 = null;
                                  IStrategoTerm o_184 = null;
                                  IStrategoTerm p_184 = null;
                                  IStrategoTerm r_184 = null;
                                  IStrategoTerm arg140 = term.getSubterm(0);
                                  if(arg140.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg140).getConstructor())
                                    break Fail289;
                                  l_184 = arg140.getSubterm(0);
                                  IStrategoTerm arg141 = arg140.getSubterm(1);
                                  if(arg141.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg141).getConstructor())
                                    break Fail289;
                                  IStrategoTerm arg142 = arg141.getSubterm(0);
                                  if(arg142.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg142).getConstructor())
                                    break Fail289;
                                  o_184 = arg142.getSubterm(0);
                                  IStrategoTerm arg143 = arg141.getSubterm(1);
                                  if(arg143.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg143).getConstructor())
                                    break Fail289;
                                  n_184 = arg143.getSubterm(0);
                                  IStrategoTerm arg144 = term.getSubterm(1);
                                  if(arg144.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg144).getConstructor())
                                    break Fail289;
                                  IStrategoTerm arg145 = arg144.getSubterm(0);
                                  if(arg145.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg145).getConstructor())
                                    break Fail289;
                                  p_184 = arg145.getSubterm(0);
                                  IStrategoTerm arg146 = arg144.getSubterm(1);
                                  if(arg146.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg146).getConstructor())
                                    break Fail289;
                                  m_184 = arg146.getSubterm(0);
                                  term = termFactory.makeTuple(o_184, p_184);
                                  term = variable_name_reorder_0_0.instance.invoke(context, term);
                                  if(term == null)
                                    break Fail289;
                                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{p_184}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{m_184})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail289;
                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{l_184, term});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail289;
                                  r_184 = term;
                                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consVar_1, new IStrategoTerm[]{o_184}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{n_184})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail289;
                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{r_184, term});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail289;
                                  if(true)
                                    break Success240;
                                }
                                term = term108;
                              }
                              Success241:
                              { 
                                if(cons45 == Normalise._consAdd_2)
                                { 
                                  Fail290:
                                  { 
                                    IStrategoTerm x_184 = null;
                                    IStrategoTerm y_184 = null;
                                    x_184 = term.getSubterm(0);
                                    y_184 = term.getSubterm(1);
                                    term = x_184;
                                    IStrategoTerm term111 = term;
                                    Success242:
                                    { 
                                      Fail291:
                                      { 
                                        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                                          break Fail291;
                                        { 
                                          if(true)
                                            break Fail290;
                                          if(true)
                                            break Success242;
                                        }
                                      }
                                      term = term111;
                                    }
                                    term = x_184;
                                    IStrategoTerm term112 = term;
                                    Success243:
                                    { 
                                      Fail292:
                                      { 
                                        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                          break Fail292;
                                        IStrategoTerm arg149 = term.getSubterm(0);
                                        if(arg149.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg149).getConstructor())
                                          break Fail292;
                                        IStrategoTerm arg151 = term.getSubterm(1);
                                        if(arg151.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg151).getConstructor())
                                          break Fail292;
                                        { 
                                          if(true)
                                            break Fail290;
                                          if(true)
                                            break Success243;
                                        }
                                      }
                                      term = term112;
                                    }
                                    term = y_184;
                                    if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                      break Fail290;
                                    IStrategoTerm arg153 = term.getSubterm(0);
                                    if(arg153.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg153).getConstructor())
                                      break Fail290;
                                    IStrategoTerm arg155 = term.getSubterm(1);
                                    if(arg155.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg155).getConstructor())
                                      break Fail290;
                                    term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{y_184, x_184});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail290;
                                    if(true)
                                      break Success241;
                                  }
                                  term = term108;
                                }
                                if(cons45 == Normalise._consAdd_2)
                                { 
                                  IStrategoTerm a_185 = null;
                                  IStrategoTerm b_185 = null;
                                  IStrategoTerm c_185 = null;
                                  IStrategoTerm arg157 = term.getSubterm(0);
                                  if(arg157.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg157).getConstructor())
                                    break Fail287;
                                  a_185 = arg157.getSubterm(0);
                                  b_185 = arg157.getSubterm(1);
                                  c_185 = term.getSubterm(1);
                                  term = b_185;
                                  IStrategoTerm term113 = term;
                                  Success244:
                                  { 
                                    Fail293:
                                    { 
                                      if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                        break Fail293;
                                      IStrategoTerm arg158 = term.getSubterm(0);
                                      if(arg158.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg158).getConstructor())
                                        break Fail293;
                                      IStrategoTerm arg160 = term.getSubterm(1);
                                      if(arg160.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg160).getConstructor())
                                        break Fail293;
                                      { 
                                        if(true)
                                          break Fail287;
                                        if(true)
                                          break Success244;
                                      }
                                    }
                                    term = term113;
                                  }
                                  term = c_185;
                                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                                    break Fail287;
                                  IStrategoTerm arg162 = term.getSubterm(0);
                                  if(arg162.getTermType() != IStrategoTerm.APPL || Normalise._consVar_1 != ((IStrategoAppl)arg162).getConstructor())
                                    break Fail287;
                                  IStrategoTerm arg164 = term.getSubterm(1);
                                  if(arg164.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg164).getConstructor())
                                    break Fail287;
                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{a_185, c_185});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail287;
                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{term, b_185});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail287;
                                }
                                else
                                { 
                                  break Fail287;
                                }
                              }
                            }
                          }
                          if(true)
                            break Success238;
                        }
                        term = term107;
                        IStrategoTerm term114 = term;
                        IStrategoConstructor cons49 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
                        Success245:
                        { 
                          if(cons49 == Normalise._consKnown_1)
                          { 
                            Fail294:
                            { 
                              IStrategoTerm arg166 = term.getSubterm(0);
                              if(arg166.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg166).getConstructor())
                                break Fail294;
                              term = Normalise.constTrue0;
                              if(true)
                                break Success245;
                            }
                            term = term114;
                          }
                          Success246:
                          { 
                            if(cons49 == Normalise._consKnown_1)
                            { 
                              Fail295:
                              { 
                                term = Normalise.constFalse0;
                                if(true)
                                  break Success246;
                              }
                              term = term114;
                            }
                            canonical_0_0_fragment_3 canonical_0_0_fragment_30 = new canonical_0_0_fragment_3();
                            canonical_0_0_fragment_30.s_198 = s_198;
                            term = canonical_0_0_fragment_30.invoke(context, term);
                            if(term == null)
                              break Fail254;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class canonical_0_0_fragment_3 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail296:
      { 
        IStrategoTerm term116 = term;
        Success247:
        { 
          Fail297:
          { 
            IStrategoTerm term117 = term;
            IStrategoConstructor cons50 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success248:
            { 
              if(cons50 == Normalise._consNeq_2)
              { 
                Fail298:
                { 
                  IStrategoTerm j_185 = null;
                  IStrategoTerm k_185 = null;
                  IStrategoTerm n_185 = null;
                  k_185 = term.getSubterm(0);
                  IStrategoTerm arg167 = term.getSubterm(1);
                  if(arg167.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg167).getConstructor())
                    break Fail298;
                  j_185 = arg167.getSubterm(0);
                  term = first_mul_0_0.instance.invoke(context, k_185);
                  if(term == null)
                    break Fail298;
                  term = termFactory.makeTuple(term, Normalise.const2);
                  term = lt$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail298;
                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{k_185, Normalise.constInt0});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail298;
                  n_185 = term;
                  term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_185})});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail298;
                  term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{n_185, term});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail298;
                  if(true)
                    break Success248;
                }
                term = term117;
              }
              Success249:
              { 
                if(cons50 == Normalise._consEqu_2)
                { 
                  Fail299:
                  { 
                    IStrategoTerm t_185 = null;
                    IStrategoTerm u_185 = null;
                    IStrategoTerm x_185 = null;
                    u_185 = term.getSubterm(0);
                    IStrategoTerm arg168 = term.getSubterm(1);
                    if(arg168.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg168).getConstructor())
                      break Fail299;
                    t_185 = arg168.getSubterm(0);
                    term = first_mul_0_0.instance.invoke(context, u_185);
                    if(term == null)
                      break Fail299;
                    term = termFactory.makeTuple(term, Normalise.const2);
                    term = lt$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail299;
                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{u_185, Normalise.constInt0});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail299;
                    x_185 = term;
                    term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{t_185})});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail299;
                    term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{x_185, term});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail299;
                    if(true)
                      break Success249;
                  }
                  term = term117;
                }
                Success250:
                { 
                  if(cons50 == Normalise._consLt_2)
                  { 
                    Fail300:
                    { 
                      IStrategoTerm b_186 = null;
                      IStrategoTerm c_186 = null;
                      IStrategoTerm f_186 = null;
                      c_186 = term.getSubterm(0);
                      IStrategoTerm arg169 = term.getSubterm(1);
                      if(arg169.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg169).getConstructor())
                        break Fail300;
                      b_186 = arg169.getSubterm(0);
                      term = first_mul_0_0.instance.invoke(context, c_186);
                      if(term == null)
                        break Fail300;
                      term = termFactory.makeTuple(term, Normalise.const2);
                      term = lt$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail300;
                      term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{c_186, Normalise.constInt0});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail300;
                      f_186 = term;
                      term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_186})});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail300;
                      term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{f_186, term});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail300;
                      if(true)
                        break Success250;
                    }
                    term = term117;
                  }
                  Success251:
                  { 
                    if(cons50 == Normalise._consLeq_2)
                    { 
                      Fail301:
                      { 
                        IStrategoTerm j_186 = null;
                        IStrategoTerm k_186 = null;
                        IStrategoTerm n_186 = null;
                        k_186 = term.getSubterm(0);
                        IStrategoTerm arg170 = term.getSubterm(1);
                        if(arg170.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg170).getConstructor())
                          break Fail301;
                        j_186 = arg170.getSubterm(0);
                        term = first_mul_0_0.instance.invoke(context, k_186);
                        if(term == null)
                          break Fail301;
                        term = termFactory.makeTuple(term, Normalise.const2);
                        term = lt$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail301;
                        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{k_186, Normalise.constInt0});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail301;
                        n_186 = term;
                        term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_186})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail301;
                        term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{n_186, term});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail301;
                        if(true)
                          break Success251;
                      }
                      term = term117;
                    }
                    Success252:
                    { 
                      if(cons50 == Normalise._consGt_2)
                      { 
                        Fail302:
                        { 
                          IStrategoTerm r_186 = null;
                          IStrategoTerm s_186 = null;
                          IStrategoTerm x_186 = null;
                          s_186 = term.getSubterm(0);
                          IStrategoTerm arg171 = term.getSubterm(1);
                          if(arg171.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg171).getConstructor())
                            break Fail302;
                          r_186 = arg171.getSubterm(0);
                          term = first_mul_0_0.instance.invoke(context, s_186);
                          if(term == null)
                            break Fail302;
                          term = termFactory.makeTuple(term, Normalise.const2);
                          term = lt$S_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail302;
                          term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{s_186, Normalise.constInt0});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail302;
                          x_186 = term;
                          term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{r_186})});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail302;
                          term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{x_186, term});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail302;
                          if(true)
                            break Success252;
                        }
                        term = term117;
                      }
                      if(cons50 == Normalise._consGeq_2)
                      { 
                        IStrategoTerm b_187 = null;
                        IStrategoTerm c_187 = null;
                        IStrategoTerm f_187 = null;
                        c_187 = term.getSubterm(0);
                        IStrategoTerm arg172 = term.getSubterm(1);
                        if(arg172.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg172).getConstructor())
                          break Fail297;
                        b_187 = arg172.getSubterm(0);
                        term = first_mul_0_0.instance.invoke(context, c_187);
                        if(term == null)
                          break Fail297;
                        term = termFactory.makeTuple(term, Normalise.const2);
                        term = lt$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail297;
                        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{c_187, Normalise.constInt0});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail297;
                        f_187 = term;
                        term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_187})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail297;
                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{f_187, term});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail297;
                      }
                      else
                      { 
                        break Fail297;
                      }
                    }
                  }
                }
              }
            }
            if(true)
              break Success247;
          }
          term = term116;
          IStrategoTerm term122 = term;
          Success253:
          { 
            Fail303:
            { 
              IStrategoTerm term123 = term;
              IStrategoConstructor cons51 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
              Success254:
              { 
                if(cons51 == Normalise._consAnd_2)
                { 
                  Fail304:
                  { 
                    IStrategoTerm j_187 = null;
                    IStrategoTerm k_187 = null;
                    j_187 = term.getSubterm(0);
                    k_187 = term.getSubterm(1);
                    term = termFactory.makeTuple(j_187, k_187);
                    term = comparison_reorder_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail304;
                    term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{k_187, j_187});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail304;
                    if(true)
                      break Success254;
                  }
                  term = term123;
                }
                Success255:
                { 
                  if(cons51 == Normalise._consAnd_2)
                  { 
                    Fail305:
                    { 
                      IStrategoTerm m_187 = null;
                      IStrategoTerm n_187 = null;
                      IStrategoTerm o_187 = null;
                      IStrategoTerm arg173 = term.getSubterm(0);
                      if(arg173.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg173).getConstructor())
                        break Fail305;
                      m_187 = arg173.getSubterm(0);
                      n_187 = arg173.getSubterm(1);
                      o_187 = term.getSubterm(1);
                      term = termFactory.makeTuple(n_187, o_187);
                      term = comparison_reorder_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail305;
                      term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{m_187, o_187});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail305;
                      term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{term, n_187});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail305;
                      if(true)
                        break Success255;
                    }
                    term = term123;
                  }
                  Success256:
                  { 
                    if(cons51 == Normalise._consOr_2)
                    { 
                      Fail306:
                      { 
                        IStrategoTerm s_187 = null;
                        IStrategoTerm t_187 = null;
                        s_187 = term.getSubterm(0);
                        t_187 = term.getSubterm(1);
                        term = termFactory.makeTuple(s_187, t_187);
                        term = comparison_reorder_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail306;
                        term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{t_187, s_187});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail306;
                        if(true)
                          break Success256;
                      }
                      term = term123;
                    }
                    if(cons51 == Normalise._consOr_2)
                    { 
                      IStrategoTerm v_187 = null;
                      IStrategoTerm w_187 = null;
                      IStrategoTerm x_187 = null;
                      IStrategoTerm arg174 = term.getSubterm(0);
                      if(arg174.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg174).getConstructor())
                        break Fail303;
                      v_187 = arg174.getSubterm(0);
                      w_187 = arg174.getSubterm(1);
                      x_187 = term.getSubterm(1);
                      term = termFactory.makeTuple(w_187, x_187);
                      term = comparison_reorder_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail303;
                      term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{v_187, x_187});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail303;
                      term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{term, w_187});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail303;
                    }
                    else
                    { 
                      break Fail303;
                    }
                  }
                }
              }
              if(true)
                break Success253;
            }
            term = term122;
            IStrategoTerm term126 = term;
            IStrategoConstructor cons52 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
            Success257:
            { 
              if(cons52 == Normalise._consAnd_2)
              { 
                Fail307:
                { 
                  IStrategoTerm b_188 = null;
                  IStrategoTerm c_188 = null;
                  IStrategoTerm d_188 = null;
                  IStrategoTerm e_188 = null;
                  IStrategoTerm arg175 = term.getSubterm(0);
                  if(arg175.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg175).getConstructor())
                    break Fail307;
                  b_188 = arg175.getSubterm(0);
                  IStrategoTerm arg176 = arg175.getSubterm(1);
                  if(arg176.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg176).getConstructor())
                    break Fail307;
                  c_188 = arg176.getSubterm(0);
                  IStrategoTerm arg177 = term.getSubterm(1);
                  if(arg177.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg177).getConstructor())
                    break Fail307;
                  if(arg177.getSubterm(0) != b_188 && !b_188.match(arg177.getSubterm(0)))
                    break Fail307;
                  IStrategoTerm arg178 = arg177.getSubterm(1);
                  if(arg178.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg178).getConstructor())
                    break Fail307;
                  d_188 = arg178.getSubterm(0);
                  term = termFactory.makeTuple(c_188, d_188);
                  term = minstring_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail307;
                  e_188 = term;
                  term = q_198.instance.invoke(context, e_188, s_198);
                  if(term == null)
                    break Fail307;
                  term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{b_188, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail307;
                  if(true)
                    break Success257;
                }
                term = term126;
              }
              Success258:
              { 
                if(cons52 == Normalise._consAnd_2)
                { 
                  Fail308:
                  { 
                    IStrategoTerm i_188 = null;
                    IStrategoTerm j_188 = null;
                    IStrategoTerm k_188 = null;
                    IStrategoTerm arg179 = term.getSubterm(0);
                    if(arg179.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg179).getConstructor())
                      break Fail308;
                    i_188 = arg179.getSubterm(0);
                    IStrategoTerm arg180 = arg179.getSubterm(1);
                    if(arg180.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg180).getConstructor())
                      break Fail308;
                    j_188 = arg180.getSubterm(0);
                    IStrategoTerm arg181 = term.getSubterm(1);
                    if(arg181.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg181).getConstructor())
                      break Fail308;
                    if(arg181.getSubterm(0) != i_188 && !i_188.match(arg181.getSubterm(0)))
                      break Fail308;
                    IStrategoTerm arg182 = arg181.getSubterm(1);
                    if(arg182.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg182).getConstructor())
                      break Fail308;
                    k_188 = arg182.getSubterm(0);
                    term = termFactory.makeTuple(j_188, k_188);
                    term = gt$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail308;
                    term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{i_188, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{k_188})});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail308;
                    if(true)
                      break Success258;
                  }
                  term = term126;
                }
                Success259:
                { 
                  if(cons52 == Normalise._consAnd_2)
                  { 
                    Fail309:
                    { 
                      IStrategoTerm m_188 = null;
                      IStrategoTerm n_188 = null;
                      IStrategoTerm o_188 = null;
                      IStrategoTerm arg183 = term.getSubterm(0);
                      if(arg183.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg183).getConstructor())
                        break Fail309;
                      m_188 = arg183.getSubterm(0);
                      IStrategoTerm arg184 = arg183.getSubterm(1);
                      if(arg184.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg184).getConstructor())
                        break Fail309;
                      n_188 = arg184.getSubterm(0);
                      IStrategoTerm arg185 = term.getSubterm(1);
                      if(arg185.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg185).getConstructor())
                        break Fail309;
                      if(arg185.getSubterm(0) != m_188 && !m_188.match(arg185.getSubterm(0)))
                        break Fail309;
                      IStrategoTerm arg186 = arg185.getSubterm(1);
                      if(arg186.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg186).getConstructor())
                        break Fail309;
                      o_188 = arg186.getSubterm(0);
                      term = termFactory.makeTuple(n_188, o_188);
                      term = leq$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail309;
                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{m_188, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{n_188})});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail309;
                      if(true)
                        break Success259;
                    }
                    term = term126;
                  }
                  Success260:
                  { 
                    if(cons52 == Normalise._consAnd_2)
                    { 
                      Fail310:
                      { 
                        IStrategoTerm q_188 = null;
                        IStrategoTerm r_188 = null;
                        IStrategoTerm s_188 = null;
                        IStrategoTerm t_188 = null;
                        IStrategoTerm arg187 = term.getSubterm(0);
                        if(arg187.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg187).getConstructor())
                          break Fail310;
                        q_188 = arg187.getSubterm(0);
                        IStrategoTerm arg188 = arg187.getSubterm(1);
                        if(arg188.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg188).getConstructor())
                          break Fail310;
                        r_188 = arg188.getSubterm(0);
                        IStrategoTerm arg189 = term.getSubterm(1);
                        if(arg189.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg189).getConstructor())
                          break Fail310;
                        if(arg189.getSubterm(0) != q_188 && !q_188.match(arg189.getSubterm(0)))
                          break Fail310;
                        IStrategoTerm arg190 = arg189.getSubterm(1);
                        if(arg190.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg190).getConstructor())
                          break Fail310;
                        s_188 = arg190.getSubterm(0);
                        term = termFactory.makeTuple(r_188, s_188);
                        term = minstring_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail310;
                        t_188 = term;
                        term = q_198.instance.invoke(context, t_188, s_198);
                        if(term == null)
                          break Fail310;
                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{q_188, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail310;
                        if(true)
                          break Success260;
                      }
                      term = term126;
                    }
                    Success261:
                    { 
                      if(cons52 == Normalise._consAnd_2)
                      { 
                        Fail311:
                        { 
                          IStrategoTerm x_188 = null;
                          IStrategoTerm y_188 = null;
                          IStrategoTerm z_188 = null;
                          IStrategoTerm arg191 = term.getSubterm(0);
                          if(arg191.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg191).getConstructor())
                            break Fail311;
                          x_188 = arg191.getSubterm(0);
                          IStrategoTerm arg192 = arg191.getSubterm(1);
                          if(arg192.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg192).getConstructor())
                            break Fail311;
                          y_188 = arg192.getSubterm(0);
                          IStrategoTerm arg193 = term.getSubterm(1);
                          if(arg193.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg193).getConstructor())
                            break Fail311;
                          if(arg193.getSubterm(0) != x_188 && !x_188.match(arg193.getSubterm(0)))
                            break Fail311;
                          IStrategoTerm arg194 = arg193.getSubterm(1);
                          if(arg194.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg194).getConstructor())
                            break Fail311;
                          z_188 = arg194.getSubterm(0);
                          term = termFactory.makeTuple(y_188, z_188);
                          IStrategoTerm term131 = term;
                          Success262:
                          { 
                            Fail312:
                            { 
                              term = eq_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail312;
                              { 
                                if(true)
                                  break Fail311;
                                if(true)
                                  break Success262;
                              }
                            }
                            term = term131;
                          }
                          term = Normalise.constFalse0;
                          if(true)
                            break Success261;
                        }
                        term = term126;
                      }
                      Success263:
                      { 
                        if(cons52 == Normalise._consAnd_2)
                        { 
                          Fail313:
                          { 
                            IStrategoTerm b_189 = null;
                            IStrategoTerm c_189 = null;
                            IStrategoTerm arg195 = term.getSubterm(0);
                            if(arg195.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg195).getConstructor())
                              break Fail313;
                            b_189 = arg195.getSubterm(0);
                            IStrategoTerm arg196 = arg195.getSubterm(1);
                            if(arg196.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg196).getConstructor())
                              break Fail313;
                            c_189 = arg196.getSubterm(0);
                            IStrategoTerm arg197 = term.getSubterm(1);
                            if(arg197.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg197).getConstructor())
                              break Fail313;
                            if(arg197.getSubterm(0) != b_189 && !b_189.match(arg197.getSubterm(0)))
                              break Fail313;
                            IStrategoTerm arg198 = arg197.getSubterm(1);
                            if(arg198.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg198).getConstructor())
                              break Fail313;
                            if(arg198.getSubterm(0) != c_189 && !c_189.match(arg198.getSubterm(0)))
                              break Fail313;
                            term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{b_189, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_189})});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail313;
                            if(true)
                              break Success263;
                          }
                          term = term126;
                        }
                        Success264:
                        { 
                          if(cons52 == Normalise._consAnd_2)
                          { 
                            Fail314:
                            { 
                              IStrategoTerm e_189 = null;
                              IStrategoTerm f_189 = null;
                              IStrategoTerm g_189 = null;
                              IStrategoTerm h_189 = null;
                              IStrategoTerm arg199 = term.getSubterm(0);
                              if(arg199.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg199).getConstructor())
                                break Fail314;
                              e_189 = arg199.getSubterm(0);
                              IStrategoTerm arg200 = arg199.getSubterm(1);
                              if(arg200.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg200).getConstructor())
                                break Fail314;
                              f_189 = arg200.getSubterm(0);
                              IStrategoTerm arg201 = term.getSubterm(1);
                              if(arg201.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg201).getConstructor())
                                break Fail314;
                              if(arg201.getSubterm(0) != e_189 && !e_189.match(arg201.getSubterm(0)))
                                break Fail314;
                              IStrategoTerm arg202 = arg201.getSubterm(1);
                              if(arg202.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg202).getConstructor())
                                break Fail314;
                              g_189 = arg202.getSubterm(0);
                              term = termFactory.makeTuple(f_189, g_189);
                              term = maxstring_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail314;
                              h_189 = term;
                              term = q_198.instance.invoke(context, h_189, s_198);
                              if(term == null)
                                break Fail314;
                              term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{e_189, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail314;
                              if(true)
                                break Success264;
                            }
                            term = term126;
                          }
                          Success265:
                          { 
                            if(cons52 == Normalise._consAnd_2)
                            { 
                              Fail315:
                              { 
                                IStrategoTerm l_189 = null;
                                IStrategoTerm m_189 = null;
                                IStrategoTerm n_189 = null;
                                IStrategoTerm arg203 = term.getSubterm(0);
                                if(arg203.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg203).getConstructor())
                                  break Fail315;
                                l_189 = arg203.getSubterm(0);
                                IStrategoTerm arg204 = arg203.getSubterm(1);
                                if(arg204.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg204).getConstructor())
                                  break Fail315;
                                m_189 = arg204.getSubterm(0);
                                IStrategoTerm arg205 = term.getSubterm(1);
                                if(arg205.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg205).getConstructor())
                                  break Fail315;
                                if(arg205.getSubterm(0) != l_189 && !l_189.match(arg205.getSubterm(0)))
                                  break Fail315;
                                IStrategoTerm arg206 = arg205.getSubterm(1);
                                if(arg206.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg206).getConstructor())
                                  break Fail315;
                                n_189 = arg206.getSubterm(0);
                                term = termFactory.makeTuple(m_189, n_189);
                                term = gt$S_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail315;
                                term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{l_189, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{m_189})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail315;
                                if(true)
                                  break Success265;
                              }
                              term = term126;
                            }
                            Success266:
                            { 
                              if(cons52 == Normalise._consAnd_2)
                              { 
                                Fail316:
                                { 
                                  IStrategoTerm p_189 = null;
                                  IStrategoTerm q_189 = null;
                                  IStrategoTerm r_189 = null;
                                  IStrategoTerm arg207 = term.getSubterm(0);
                                  if(arg207.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg207).getConstructor())
                                    break Fail316;
                                  p_189 = arg207.getSubterm(0);
                                  IStrategoTerm arg208 = arg207.getSubterm(1);
                                  if(arg208.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg208).getConstructor())
                                    break Fail316;
                                  q_189 = arg208.getSubterm(0);
                                  IStrategoTerm arg209 = term.getSubterm(1);
                                  if(arg209.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg209).getConstructor())
                                    break Fail316;
                                  if(arg209.getSubterm(0) != p_189 && !p_189.match(arg209.getSubterm(0)))
                                    break Fail316;
                                  IStrategoTerm arg210 = arg209.getSubterm(1);
                                  if(arg210.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg210).getConstructor())
                                    break Fail316;
                                  r_189 = arg210.getSubterm(0);
                                  term = termFactory.makeTuple(q_189, r_189);
                                  term = leq$S_0_0.instance.invoke(context, term);
                                  if(term == null)
                                    break Fail316;
                                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{p_189, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{r_189})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail316;
                                  if(true)
                                    break Success266;
                                }
                                term = term126;
                              }
                              Success267:
                              { 
                                if(cons52 == Normalise._consAnd_2)
                                { 
                                  Fail317:
                                  { 
                                    IStrategoTerm t_189 = null;
                                    IStrategoTerm u_189 = null;
                                    IStrategoTerm v_189 = null;
                                    IStrategoTerm w_189 = null;
                                    IStrategoTerm arg211 = term.getSubterm(0);
                                    if(arg211.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg211).getConstructor())
                                      break Fail317;
                                    t_189 = arg211.getSubterm(0);
                                    IStrategoTerm arg212 = arg211.getSubterm(1);
                                    if(arg212.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg212).getConstructor())
                                      break Fail317;
                                    u_189 = arg212.getSubterm(0);
                                    IStrategoTerm arg213 = term.getSubterm(1);
                                    if(arg213.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg213).getConstructor())
                                      break Fail317;
                                    if(arg213.getSubterm(0) != t_189 && !t_189.match(arg213.getSubterm(0)))
                                      break Fail317;
                                    IStrategoTerm arg214 = arg213.getSubterm(1);
                                    if(arg214.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg214).getConstructor())
                                      break Fail317;
                                    v_189 = arg214.getSubterm(0);
                                    term = termFactory.makeTuple(u_189, v_189);
                                    term = maxstring_0_0.instance.invoke(context, term);
                                    if(term == null)
                                      break Fail317;
                                    w_189 = term;
                                    term = q_198.instance.invoke(context, w_189, s_198);
                                    if(term == null)
                                      break Fail317;
                                    term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{t_189, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail317;
                                    if(true)
                                      break Success267;
                                  }
                                  term = term126;
                                }
                                Success268:
                                { 
                                  if(cons52 == Normalise._consAnd_2)
                                  { 
                                    Fail318:
                                    { 
                                      IStrategoTerm a_190 = null;
                                      IStrategoTerm b_190 = null;
                                      IStrategoTerm c_190 = null;
                                      IStrategoTerm d_190 = null;
                                      IStrategoTerm e_190 = null;
                                      IStrategoTerm arg215 = term.getSubterm(0);
                                      if(arg215.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg215).getConstructor())
                                        break Fail318;
                                      a_190 = arg215.getSubterm(0);
                                      IStrategoTerm arg216 = arg215.getSubterm(1);
                                      if(arg216.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg216).getConstructor())
                                        break Fail318;
                                      b_190 = arg216.getSubterm(0);
                                      IStrategoTerm arg217 = arg216.getSubterm(1);
                                      if(arg217.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg217).getConstructor())
                                        break Fail318;
                                      c_190 = arg217.getSubterm(0);
                                      IStrategoTerm arg218 = term.getSubterm(1);
                                      if(arg218.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg218).getConstructor())
                                        break Fail318;
                                      if(arg218.getSubterm(0) != b_190 && !b_190.match(arg218.getSubterm(0)))
                                        break Fail318;
                                      IStrategoTerm arg219 = arg218.getSubterm(1);
                                      if(arg219.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg219).getConstructor())
                                        break Fail318;
                                      d_190 = arg219.getSubterm(0);
                                      term = termFactory.makeTuple(c_190, d_190);
                                      term = minstring_0_0.instance.invoke(context, term);
                                      if(term == null)
                                        break Fail318;
                                      e_190 = term;
                                      term = q_198.instance.invoke(context, e_190, s_198);
                                      if(term == null)
                                        break Fail318;
                                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{b_190, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail318;
                                      term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{a_190, term});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail318;
                                      if(true)
                                        break Success268;
                                    }
                                    term = term126;
                                  }
                                  Success269:
                                  { 
                                    if(cons52 == Normalise._consAnd_2)
                                    { 
                                      Fail319:
                                      { 
                                        IStrategoTerm k_190 = null;
                                        IStrategoTerm l_190 = null;
                                        IStrategoTerm m_190 = null;
                                        IStrategoTerm n_190 = null;
                                        IStrategoTerm arg220 = term.getSubterm(0);
                                        if(arg220.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg220).getConstructor())
                                          break Fail319;
                                        k_190 = arg220.getSubterm(0);
                                        IStrategoTerm arg221 = arg220.getSubterm(1);
                                        if(arg221.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg221).getConstructor())
                                          break Fail319;
                                        l_190 = arg221.getSubterm(0);
                                        IStrategoTerm arg222 = arg221.getSubterm(1);
                                        if(arg222.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg222).getConstructor())
                                          break Fail319;
                                        m_190 = arg222.getSubterm(0);
                                        IStrategoTerm arg223 = term.getSubterm(1);
                                        if(arg223.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg223).getConstructor())
                                          break Fail319;
                                        if(arg223.getSubterm(0) != l_190 && !l_190.match(arg223.getSubterm(0)))
                                          break Fail319;
                                        IStrategoTerm arg224 = arg223.getSubterm(1);
                                        if(arg224.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg224).getConstructor())
                                          break Fail319;
                                        n_190 = arg224.getSubterm(0);
                                        term = termFactory.makeTuple(m_190, n_190);
                                        term = gt$S_0_0.instance.invoke(context, term);
                                        if(term == null)
                                          break Fail319;
                                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{l_190, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{n_190})});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail319;
                                        term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{k_190, term});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail319;
                                        if(true)
                                          break Success269;
                                      }
                                      term = term126;
                                    }
                                    Success270:
                                    { 
                                      if(cons52 == Normalise._consAnd_2)
                                      { 
                                        Fail320:
                                        { 
                                          IStrategoTerm r_190 = null;
                                          IStrategoTerm s_190 = null;
                                          IStrategoTerm t_190 = null;
                                          IStrategoTerm u_190 = null;
                                          IStrategoTerm arg225 = term.getSubterm(0);
                                          if(arg225.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg225).getConstructor())
                                            break Fail320;
                                          r_190 = arg225.getSubterm(0);
                                          IStrategoTerm arg226 = arg225.getSubterm(1);
                                          if(arg226.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg226).getConstructor())
                                            break Fail320;
                                          s_190 = arg226.getSubterm(0);
                                          IStrategoTerm arg227 = arg226.getSubterm(1);
                                          if(arg227.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg227).getConstructor())
                                            break Fail320;
                                          t_190 = arg227.getSubterm(0);
                                          IStrategoTerm arg228 = term.getSubterm(1);
                                          if(arg228.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg228).getConstructor())
                                            break Fail320;
                                          if(arg228.getSubterm(0) != s_190 && !s_190.match(arg228.getSubterm(0)))
                                            break Fail320;
                                          IStrategoTerm arg229 = arg228.getSubterm(1);
                                          if(arg229.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg229).getConstructor())
                                            break Fail320;
                                          u_190 = arg229.getSubterm(0);
                                          term = termFactory.makeTuple(t_190, u_190);
                                          term = leq$S_0_0.instance.invoke(context, term);
                                          if(term == null)
                                            break Fail320;
                                          term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{s_190, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{t_190})});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail320;
                                          term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{r_190, term});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail320;
                                          if(true)
                                            break Success270;
                                        }
                                        term = term126;
                                      }
                                      Success271:
                                      { 
                                        if(cons52 == Normalise._consAnd_2)
                                        { 
                                          Fail321:
                                          { 
                                            IStrategoTerm y_190 = null;
                                            IStrategoTerm z_190 = null;
                                            IStrategoTerm a_191 = null;
                                            IStrategoTerm b_191 = null;
                                            IStrategoTerm c_191 = null;
                                            IStrategoTerm arg230 = term.getSubterm(0);
                                            if(arg230.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg230).getConstructor())
                                              break Fail321;
                                            y_190 = arg230.getSubterm(0);
                                            IStrategoTerm arg231 = arg230.getSubterm(1);
                                            if(arg231.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg231).getConstructor())
                                              break Fail321;
                                            z_190 = arg231.getSubterm(0);
                                            IStrategoTerm arg232 = arg231.getSubterm(1);
                                            if(arg232.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg232).getConstructor())
                                              break Fail321;
                                            a_191 = arg232.getSubterm(0);
                                            IStrategoTerm arg233 = term.getSubterm(1);
                                            if(arg233.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg233).getConstructor())
                                              break Fail321;
                                            if(arg233.getSubterm(0) != z_190 && !z_190.match(arg233.getSubterm(0)))
                                              break Fail321;
                                            IStrategoTerm arg234 = arg233.getSubterm(1);
                                            if(arg234.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg234).getConstructor())
                                              break Fail321;
                                            b_191 = arg234.getSubterm(0);
                                            term = termFactory.makeTuple(a_191, b_191);
                                            term = minstring_0_0.instance.invoke(context, term);
                                            if(term == null)
                                              break Fail321;
                                            c_191 = term;
                                            term = q_198.instance.invoke(context, c_191, s_198);
                                            if(term == null)
                                              break Fail321;
                                            term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{z_190, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail321;
                                            term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{y_190, term});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail321;
                                            if(true)
                                              break Success271;
                                          }
                                          term = term126;
                                        }
                                        Success272:
                                        { 
                                          if(cons52 == Normalise._consAnd_2)
                                          { 
                                            Fail322:
                                            { 
                                              IStrategoTerm l_191 = null;
                                              IStrategoTerm m_191 = null;
                                              IStrategoTerm n_191 = null;
                                              IStrategoTerm arg235 = term.getSubterm(0);
                                              if(arg235.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg235).getConstructor())
                                                break Fail322;
                                              IStrategoTerm arg236 = arg235.getSubterm(1);
                                              if(arg236.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg236).getConstructor())
                                                break Fail322;
                                              l_191 = arg236.getSubterm(0);
                                              IStrategoTerm arg237 = arg236.getSubterm(1);
                                              if(arg237.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg237).getConstructor())
                                                break Fail322;
                                              m_191 = arg237.getSubterm(0);
                                              IStrategoTerm arg238 = term.getSubterm(1);
                                              if(arg238.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg238).getConstructor())
                                                break Fail322;
                                              if(arg238.getSubterm(0) != l_191 && !l_191.match(arg238.getSubterm(0)))
                                                break Fail322;
                                              IStrategoTerm arg239 = arg238.getSubterm(1);
                                              if(arg239.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg239).getConstructor())
                                                break Fail322;
                                              n_191 = arg239.getSubterm(0);
                                              term = termFactory.makeTuple(m_191, n_191);
                                              IStrategoTerm term142 = term;
                                              Success273:
                                              { 
                                                Fail323:
                                                { 
                                                  term = eq_0_0.instance.invoke(context, term);
                                                  if(term == null)
                                                    break Fail323;
                                                  { 
                                                    if(true)
                                                      break Fail322;
                                                    if(true)
                                                      break Success273;
                                                  }
                                                }
                                                term = term142;
                                              }
                                              term = Normalise.constFalse0;
                                              if(true)
                                                break Success272;
                                            }
                                            term = term126;
                                          }
                                          Success274:
                                          { 
                                            if(cons52 == Normalise._consAnd_2)
                                            { 
                                              Fail324:
                                              { 
                                                IStrategoTerm p_191 = null;
                                                IStrategoTerm t_191 = null;
                                                IStrategoTerm u_191 = null;
                                                IStrategoTerm arg240 = term.getSubterm(0);
                                                if(arg240.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg240).getConstructor())
                                                  break Fail324;
                                                p_191 = arg240.getSubterm(0);
                                                IStrategoTerm arg241 = arg240.getSubterm(1);
                                                if(arg241.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg241).getConstructor())
                                                  break Fail324;
                                                t_191 = arg241.getSubterm(0);
                                                IStrategoTerm arg242 = arg241.getSubterm(1);
                                                if(arg242.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg242).getConstructor())
                                                  break Fail324;
                                                u_191 = arg242.getSubterm(0);
                                                IStrategoTerm arg243 = term.getSubterm(1);
                                                if(arg243.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg243).getConstructor())
                                                  break Fail324;
                                                if(arg243.getSubterm(0) != t_191 && !t_191.match(arg243.getSubterm(0)))
                                                  break Fail324;
                                                IStrategoTerm arg244 = arg243.getSubterm(1);
                                                if(arg244.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg244).getConstructor())
                                                  break Fail324;
                                                if(arg244.getSubterm(0) != u_191 && !u_191.match(arg244.getSubterm(0)))
                                                  break Fail324;
                                                term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{t_191, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{u_191})});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail324;
                                                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{p_191, term});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail324;
                                                if(true)
                                                  break Success274;
                                              }
                                              term = term126;
                                            }
                                            Success275:
                                            { 
                                              if(cons52 == Normalise._consAnd_2)
                                              { 
                                                Fail325:
                                                { 
                                                  IStrategoTerm x_191 = null;
                                                  IStrategoTerm y_191 = null;
                                                  IStrategoTerm z_191 = null;
                                                  IStrategoTerm a_192 = null;
                                                  IStrategoTerm d_192 = null;
                                                  IStrategoTerm arg245 = term.getSubterm(0);
                                                  if(arg245.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg245).getConstructor())
                                                    break Fail325;
                                                  x_191 = arg245.getSubterm(0);
                                                  IStrategoTerm arg246 = arg245.getSubterm(1);
                                                  if(arg246.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg246).getConstructor())
                                                    break Fail325;
                                                  y_191 = arg246.getSubterm(0);
                                                  IStrategoTerm arg247 = arg246.getSubterm(1);
                                                  if(arg247.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg247).getConstructor())
                                                    break Fail325;
                                                  z_191 = arg247.getSubterm(0);
                                                  IStrategoTerm arg248 = term.getSubterm(1);
                                                  if(arg248.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg248).getConstructor())
                                                    break Fail325;
                                                  if(arg248.getSubterm(0) != y_191 && !y_191.match(arg248.getSubterm(0)))
                                                    break Fail325;
                                                  IStrategoTerm arg249 = arg248.getSubterm(1);
                                                  if(arg249.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg249).getConstructor())
                                                    break Fail325;
                                                  a_192 = arg249.getSubterm(0);
                                                  term = termFactory.makeTuple(z_191, a_192);
                                                  term = maxstring_0_0.instance.invoke(context, term);
                                                  if(term == null)
                                                    break Fail325;
                                                  d_192 = term;
                                                  term = q_198.instance.invoke(context, d_192, s_198);
                                                  if(term == null)
                                                    break Fail325;
                                                  term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{y_191, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail325;
                                                  term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{x_191, term});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail325;
                                                  if(true)
                                                    break Success275;
                                                }
                                                term = term126;
                                              }
                                              Success276:
                                              { 
                                                if(cons52 == Normalise._consAnd_2)
                                                { 
                                                  Fail326:
                                                  { 
                                                    IStrategoTerm j_192 = null;
                                                    IStrategoTerm k_192 = null;
                                                    IStrategoTerm l_192 = null;
                                                    IStrategoTerm m_192 = null;
                                                    IStrategoTerm arg250 = term.getSubterm(0);
                                                    if(arg250.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg250).getConstructor())
                                                      break Fail326;
                                                    j_192 = arg250.getSubterm(0);
                                                    IStrategoTerm arg251 = arg250.getSubterm(1);
                                                    if(arg251.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg251).getConstructor())
                                                      break Fail326;
                                                    k_192 = arg251.getSubterm(0);
                                                    IStrategoTerm arg252 = arg251.getSubterm(1);
                                                    if(arg252.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg252).getConstructor())
                                                      break Fail326;
                                                    l_192 = arg252.getSubterm(0);
                                                    IStrategoTerm arg253 = term.getSubterm(1);
                                                    if(arg253.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg253).getConstructor())
                                                      break Fail326;
                                                    if(arg253.getSubterm(0) != k_192 && !k_192.match(arg253.getSubterm(0)))
                                                      break Fail326;
                                                    IStrategoTerm arg254 = arg253.getSubterm(1);
                                                    if(arg254.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg254).getConstructor())
                                                      break Fail326;
                                                    m_192 = arg254.getSubterm(0);
                                                    term = termFactory.makeTuple(l_192, m_192);
                                                    term = gt$S_0_0.instance.invoke(context, term);
                                                    if(term == null)
                                                      break Fail326;
                                                    term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{k_192, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_192})});
                                                    term = s_198.invoke(context, term);
                                                    if(term == null)
                                                      break Fail326;
                                                    term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{j_192, term});
                                                    term = s_198.invoke(context, term);
                                                    if(term == null)
                                                      break Fail326;
                                                    if(true)
                                                      break Success276;
                                                  }
                                                  term = term126;
                                                }
                                                canonical_0_0_fragment_2 canonical_0_0_fragment_20 = new canonical_0_0_fragment_2();
                                                canonical_0_0_fragment_20.s_198 = s_198;
                                                term = canonical_0_0_fragment_20.invoke(context, term);
                                                if(term == null)
                                                  break Fail296;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class canonical_0_0_fragment_2 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail327:
      { 
        IStrategoTerm term146 = term;
        IStrategoConstructor cons53 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success277:
        { 
          if(cons53 == Normalise._consAnd_2)
          { 
            Fail328:
            { 
              IStrategoTerm u_192 = null;
              IStrategoTerm v_192 = null;
              IStrategoTerm w_192 = null;
              IStrategoTerm x_192 = null;
              IStrategoTerm arg255 = term.getSubterm(0);
              if(arg255.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg255).getConstructor())
                break Fail328;
              u_192 = arg255.getSubterm(0);
              IStrategoTerm arg256 = arg255.getSubterm(1);
              if(arg256.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg256).getConstructor())
                break Fail328;
              v_192 = arg256.getSubterm(0);
              IStrategoTerm arg257 = arg256.getSubterm(1);
              if(arg257.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg257).getConstructor())
                break Fail328;
              w_192 = arg257.getSubterm(0);
              IStrategoTerm arg258 = term.getSubterm(1);
              if(arg258.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg258).getConstructor())
                break Fail328;
              if(arg258.getSubterm(0) != v_192 && !v_192.match(arg258.getSubterm(0)))
                break Fail328;
              IStrategoTerm arg259 = arg258.getSubterm(1);
              if(arg259.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg259).getConstructor())
                break Fail328;
              x_192 = arg259.getSubterm(0);
              term = termFactory.makeTuple(w_192, x_192);
              term = leq$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail328;
              term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{v_192, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{x_192})});
              term = s_198.invoke(context, term);
              if(term == null)
                break Fail328;
              term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{u_192, term});
              term = s_198.invoke(context, term);
              if(term == null)
                break Fail328;
              if(true)
                break Success277;
            }
            term = term146;
          }
          Success278:
          { 
            if(cons53 == Normalise._consAnd_2)
            { 
              Fail329:
              { 
                IStrategoTerm b_193 = null;
                IStrategoTerm c_193 = null;
                IStrategoTerm d_193 = null;
                IStrategoTerm e_193 = null;
                IStrategoTerm f_193 = null;
                IStrategoTerm arg260 = term.getSubterm(0);
                if(arg260.getTermType() != IStrategoTerm.APPL || Normalise._consAnd_2 != ((IStrategoAppl)arg260).getConstructor())
                  break Fail329;
                b_193 = arg260.getSubterm(0);
                IStrategoTerm arg261 = arg260.getSubterm(1);
                if(arg261.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg261).getConstructor())
                  break Fail329;
                c_193 = arg261.getSubterm(0);
                IStrategoTerm arg262 = arg261.getSubterm(1);
                if(arg262.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg262).getConstructor())
                  break Fail329;
                d_193 = arg262.getSubterm(0);
                IStrategoTerm arg263 = term.getSubterm(1);
                if(arg263.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg263).getConstructor())
                  break Fail329;
                if(arg263.getSubterm(0) != c_193 && !c_193.match(arg263.getSubterm(0)))
                  break Fail329;
                IStrategoTerm arg264 = arg263.getSubterm(1);
                if(arg264.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg264).getConstructor())
                  break Fail329;
                e_193 = arg264.getSubterm(0);
                term = termFactory.makeTuple(d_193, e_193);
                term = maxstring_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail329;
                f_193 = term;
                term = q_198.instance.invoke(context, f_193, s_198);
                if(term == null)
                  break Fail329;
                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{c_193, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                term = s_198.invoke(context, term);
                if(term == null)
                  break Fail329;
                term = termFactory.makeAppl(Normalise._consAnd_2, new IStrategoTerm[]{b_193, term});
                term = s_198.invoke(context, term);
                if(term == null)
                  break Fail329;
                if(true)
                  break Success278;
              }
              term = term146;
            }
            Success279:
            { 
              if(cons53 == Normalise._consOr_2)
              { 
                Fail330:
                { 
                  IStrategoTerm s_193 = null;
                  IStrategoTerm t_193 = null;
                  IStrategoTerm v_193 = null;
                  IStrategoTerm w_193 = null;
                  IStrategoTerm arg265 = term.getSubterm(0);
                  if(arg265.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg265).getConstructor())
                    break Fail330;
                  s_193 = arg265.getSubterm(0);
                  IStrategoTerm arg266 = arg265.getSubterm(1);
                  if(arg266.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg266).getConstructor())
                    break Fail330;
                  t_193 = arg266.getSubterm(0);
                  IStrategoTerm arg267 = term.getSubterm(1);
                  if(arg267.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg267).getConstructor())
                    break Fail330;
                  if(arg267.getSubterm(0) != s_193 && !s_193.match(arg267.getSubterm(0)))
                    break Fail330;
                  IStrategoTerm arg268 = arg267.getSubterm(1);
                  if(arg268.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg268).getConstructor())
                    break Fail330;
                  v_193 = arg268.getSubterm(0);
                  term = termFactory.makeTuple(t_193, v_193);
                  term = maxstring_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail330;
                  w_193 = term;
                  term = q_198.instance.invoke(context, w_193, s_198);
                  if(term == null)
                    break Fail330;
                  term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{s_193, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail330;
                  if(true)
                    break Success279;
                }
                term = term146;
              }
              Success280:
              { 
                if(cons53 == Normalise._consOr_2)
                { 
                  Fail331:
                  { 
                    IStrategoTerm a_194 = null;
                    IStrategoTerm b_194 = null;
                    IStrategoTerm c_194 = null;
                    IStrategoTerm arg269 = term.getSubterm(0);
                    if(arg269.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg269).getConstructor())
                      break Fail331;
                    a_194 = arg269.getSubterm(0);
                    IStrategoTerm arg270 = arg269.getSubterm(1);
                    if(arg270.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg270).getConstructor())
                      break Fail331;
                    b_194 = arg270.getSubterm(0);
                    IStrategoTerm arg271 = term.getSubterm(1);
                    if(arg271.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg271).getConstructor())
                      break Fail331;
                    if(arg271.getSubterm(0) != a_194 && !a_194.match(arg271.getSubterm(0)))
                      break Fail331;
                    IStrategoTerm arg272 = arg271.getSubterm(1);
                    if(arg272.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg272).getConstructor())
                      break Fail331;
                    c_194 = arg272.getSubterm(0);
                    term = termFactory.makeTuple(b_194, c_194);
                    term = leq$S_0_0.instance.invoke(context, term);
                    if(term == null)
                      break Fail331;
                    term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{a_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_194})});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail331;
                    if(true)
                      break Success280;
                  }
                  term = term146;
                }
                Success281:
                { 
                  if(cons53 == Normalise._consOr_2)
                  { 
                    Fail332:
                    { 
                      IStrategoTerm e_194 = null;
                      IStrategoTerm f_194 = null;
                      IStrategoTerm g_194 = null;
                      IStrategoTerm arg273 = term.getSubterm(0);
                      if(arg273.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg273).getConstructor())
                        break Fail332;
                      e_194 = arg273.getSubterm(0);
                      IStrategoTerm arg274 = arg273.getSubterm(1);
                      if(arg274.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg274).getConstructor())
                        break Fail332;
                      f_194 = arg274.getSubterm(0);
                      IStrategoTerm arg275 = term.getSubterm(1);
                      if(arg275.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg275).getConstructor())
                        break Fail332;
                      if(arg275.getSubterm(0) != e_194 && !e_194.match(arg275.getSubterm(0)))
                        break Fail332;
                      IStrategoTerm arg276 = arg275.getSubterm(1);
                      if(arg276.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg276).getConstructor())
                        break Fail332;
                      g_194 = arg276.getSubterm(0);
                      term = termFactory.makeTuple(f_194, g_194);
                      term = gt$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail332;
                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{e_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{f_194})});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail332;
                      if(true)
                        break Success281;
                    }
                    term = term146;
                  }
                  Success282:
                  { 
                    if(cons53 == Normalise._consOr_2)
                    { 
                      Fail333:
                      { 
                        IStrategoTerm i_194 = null;
                        IStrategoTerm j_194 = null;
                        IStrategoTerm k_194 = null;
                        IStrategoTerm l_194 = null;
                        IStrategoTerm arg277 = term.getSubterm(0);
                        if(arg277.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg277).getConstructor())
                          break Fail333;
                        i_194 = arg277.getSubterm(0);
                        IStrategoTerm arg278 = arg277.getSubterm(1);
                        if(arg278.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg278).getConstructor())
                          break Fail333;
                        j_194 = arg278.getSubterm(0);
                        IStrategoTerm arg279 = term.getSubterm(1);
                        if(arg279.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg279).getConstructor())
                          break Fail333;
                        if(arg279.getSubterm(0) != i_194 && !i_194.match(arg279.getSubterm(0)))
                          break Fail333;
                        IStrategoTerm arg280 = arg279.getSubterm(1);
                        if(arg280.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg280).getConstructor())
                          break Fail333;
                        k_194 = arg280.getSubterm(0);
                        term = termFactory.makeTuple(j_194, k_194);
                        term = maxstring_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail333;
                        l_194 = term;
                        term = q_198.instance.invoke(context, l_194, s_198);
                        if(term == null)
                          break Fail333;
                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{i_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail333;
                        if(true)
                          break Success282;
                      }
                      term = term146;
                    }
                    Success283:
                    { 
                      if(cons53 == Normalise._consOr_2)
                      { 
                        Fail334:
                        { 
                          IStrategoTerm p_194 = null;
                          IStrategoTerm q_194 = null;
                          IStrategoTerm arg281 = term.getSubterm(0);
                          if(arg281.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg281).getConstructor())
                            break Fail334;
                          p_194 = arg281.getSubterm(0);
                          IStrategoTerm arg282 = arg281.getSubterm(1);
                          if(arg282.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg282).getConstructor())
                            break Fail334;
                          q_194 = arg282.getSubterm(0);
                          IStrategoTerm arg283 = term.getSubterm(1);
                          if(arg283.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg283).getConstructor())
                            break Fail334;
                          if(arg283.getSubterm(0) != p_194 && !p_194.match(arg283.getSubterm(0)))
                            break Fail334;
                          IStrategoTerm arg284 = arg283.getSubterm(1);
                          if(arg284.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg284).getConstructor())
                            break Fail334;
                          if(arg284.getSubterm(0) != q_194 && !q_194.match(arg284.getSubterm(0)))
                            break Fail334;
                          term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{p_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{q_194})});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail334;
                          if(true)
                            break Success283;
                        }
                        term = term146;
                      }
                      Success284:
                      { 
                        if(cons53 == Normalise._consOr_2)
                        { 
                          Fail335:
                          { 
                            IStrategoTerm r_194 = null;
                            IStrategoTerm s_194 = null;
                            IStrategoTerm t_194 = null;
                            IStrategoTerm u_194 = null;
                            IStrategoTerm arg285 = term.getSubterm(0);
                            if(arg285.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg285).getConstructor())
                              break Fail335;
                            r_194 = arg285.getSubterm(0);
                            IStrategoTerm arg286 = arg285.getSubterm(1);
                            if(arg286.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg286).getConstructor())
                              break Fail335;
                            s_194 = arg286.getSubterm(0);
                            IStrategoTerm arg287 = term.getSubterm(1);
                            if(arg287.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg287).getConstructor())
                              break Fail335;
                            if(arg287.getSubterm(0) != r_194 && !r_194.match(arg287.getSubterm(0)))
                              break Fail335;
                            IStrategoTerm arg288 = arg287.getSubterm(1);
                            if(arg288.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg288).getConstructor())
                              break Fail335;
                            t_194 = arg288.getSubterm(0);
                            term = termFactory.makeTuple(s_194, t_194);
                            term = minstring_0_0.instance.invoke(context, term);
                            if(term == null)
                              break Fail335;
                            u_194 = term;
                            term = q_198.instance.invoke(context, u_194, s_198);
                            if(term == null)
                              break Fail335;
                            term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{r_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail335;
                            if(true)
                              break Success284;
                          }
                          term = term146;
                        }
                        Success285:
                        { 
                          if(cons53 == Normalise._consOr_2)
                          { 
                            Fail336:
                            { 
                              IStrategoTerm y_194 = null;
                              IStrategoTerm z_194 = null;
                              IStrategoTerm a_195 = null;
                              IStrategoTerm arg289 = term.getSubterm(0);
                              if(arg289.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg289).getConstructor())
                                break Fail336;
                              y_194 = arg289.getSubterm(0);
                              IStrategoTerm arg290 = arg289.getSubterm(1);
                              if(arg290.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg290).getConstructor())
                                break Fail336;
                              z_194 = arg290.getSubterm(0);
                              IStrategoTerm arg291 = term.getSubterm(1);
                              if(arg291.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg291).getConstructor())
                                break Fail336;
                              if(arg291.getSubterm(0) != y_194 && !y_194.match(arg291.getSubterm(0)))
                                break Fail336;
                              IStrategoTerm arg292 = arg291.getSubterm(1);
                              if(arg292.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg292).getConstructor())
                                break Fail336;
                              a_195 = arg292.getSubterm(0);
                              term = termFactory.makeTuple(z_194, a_195);
                              term = leq$S_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail336;
                              term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{y_194, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{z_194})});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail336;
                              if(true)
                                break Success285;
                            }
                            term = term146;
                          }
                          Success286:
                          { 
                            if(cons53 == Normalise._consOr_2)
                            { 
                              Fail337:
                              { 
                                IStrategoTerm c_195 = null;
                                IStrategoTerm d_195 = null;
                                IStrategoTerm e_195 = null;
                                IStrategoTerm arg293 = term.getSubterm(0);
                                if(arg293.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg293).getConstructor())
                                  break Fail337;
                                c_195 = arg293.getSubterm(0);
                                IStrategoTerm arg294 = arg293.getSubterm(1);
                                if(arg294.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg294).getConstructor())
                                  break Fail337;
                                d_195 = arg294.getSubterm(0);
                                IStrategoTerm arg295 = term.getSubterm(1);
                                if(arg295.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg295).getConstructor())
                                  break Fail337;
                                if(arg295.getSubterm(0) != c_195 && !c_195.match(arg295.getSubterm(0)))
                                  break Fail337;
                                IStrategoTerm arg296 = arg295.getSubterm(1);
                                if(arg296.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg296).getConstructor())
                                  break Fail337;
                                e_195 = arg296.getSubterm(0);
                                term = termFactory.makeTuple(d_195, e_195);
                                term = gt$S_0_0.instance.invoke(context, term);
                                if(term == null)
                                  break Fail337;
                                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{c_195, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_195})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail337;
                                if(true)
                                  break Success286;
                              }
                              term = term146;
                            }
                            Success287:
                            { 
                              if(cons53 == Normalise._consOr_2)
                              { 
                                Fail338:
                                { 
                                  IStrategoTerm i_195 = null;
                                  IStrategoTerm j_195 = null;
                                  IStrategoTerm k_195 = null;
                                  IStrategoTerm l_195 = null;
                                  IStrategoTerm arg297 = term.getSubterm(0);
                                  if(arg297.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg297).getConstructor())
                                    break Fail338;
                                  i_195 = arg297.getSubterm(0);
                                  IStrategoTerm arg298 = arg297.getSubterm(1);
                                  if(arg298.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg298).getConstructor())
                                    break Fail338;
                                  j_195 = arg298.getSubterm(0);
                                  IStrategoTerm arg299 = term.getSubterm(1);
                                  if(arg299.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg299).getConstructor())
                                    break Fail338;
                                  if(arg299.getSubterm(0) != i_195 && !i_195.match(arg299.getSubterm(0)))
                                    break Fail338;
                                  IStrategoTerm arg300 = arg299.getSubterm(1);
                                  if(arg300.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg300).getConstructor())
                                    break Fail338;
                                  k_195 = arg300.getSubterm(0);
                                  term = termFactory.makeTuple(j_195, k_195);
                                  term = minstring_0_0.instance.invoke(context, term);
                                  if(term == null)
                                    break Fail338;
                                  l_195 = term;
                                  term = q_198.instance.invoke(context, l_195, s_198);
                                  if(term == null)
                                    break Fail338;
                                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{i_195, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail338;
                                  if(true)
                                    break Success287;
                                }
                                term = term146;
                              }
                              Success288:
                              { 
                                if(cons53 == Normalise._consOr_2)
                                { 
                                  Fail339:
                                  { 
                                    IStrategoTerm p_195 = null;
                                    IStrategoTerm q_195 = null;
                                    IStrategoTerm r_195 = null;
                                    IStrategoTerm s_195 = null;
                                    IStrategoTerm t_195 = null;
                                    IStrategoTerm arg301 = term.getSubterm(0);
                                    if(arg301.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg301).getConstructor())
                                      break Fail339;
                                    p_195 = arg301.getSubterm(0);
                                    IStrategoTerm arg302 = arg301.getSubterm(1);
                                    if(arg302.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg302).getConstructor())
                                      break Fail339;
                                    q_195 = arg302.getSubterm(0);
                                    IStrategoTerm arg303 = arg302.getSubterm(1);
                                    if(arg303.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg303).getConstructor())
                                      break Fail339;
                                    r_195 = arg303.getSubterm(0);
                                    IStrategoTerm arg304 = term.getSubterm(1);
                                    if(arg304.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg304).getConstructor())
                                      break Fail339;
                                    if(arg304.getSubterm(0) != q_195 && !q_195.match(arg304.getSubterm(0)))
                                      break Fail339;
                                    IStrategoTerm arg305 = arg304.getSubterm(1);
                                    if(arg305.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg305).getConstructor())
                                      break Fail339;
                                    s_195 = arg305.getSubterm(0);
                                    term = termFactory.makeTuple(r_195, s_195);
                                    term = maxstring_0_0.instance.invoke(context, term);
                                    if(term == null)
                                      break Fail339;
                                    t_195 = term;
                                    term = q_198.instance.invoke(context, t_195, s_198);
                                    if(term == null)
                                      break Fail339;
                                    term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{q_195, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail339;
                                    term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{p_195, term});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail339;
                                    if(true)
                                      break Success288;
                                  }
                                  term = term146;
                                }
                                Success289:
                                { 
                                  if(cons53 == Normalise._consOr_2)
                                  { 
                                    Fail340:
                                    { 
                                      IStrategoTerm z_195 = null;
                                      IStrategoTerm a_196 = null;
                                      IStrategoTerm b_196 = null;
                                      IStrategoTerm c_196 = null;
                                      IStrategoTerm arg306 = term.getSubterm(0);
                                      if(arg306.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg306).getConstructor())
                                        break Fail340;
                                      z_195 = arg306.getSubterm(0);
                                      IStrategoTerm arg307 = arg306.getSubterm(1);
                                      if(arg307.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg307).getConstructor())
                                        break Fail340;
                                      a_196 = arg307.getSubterm(0);
                                      IStrategoTerm arg308 = arg307.getSubterm(1);
                                      if(arg308.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg308).getConstructor())
                                        break Fail340;
                                      b_196 = arg308.getSubterm(0);
                                      IStrategoTerm arg309 = term.getSubterm(1);
                                      if(arg309.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg309).getConstructor())
                                        break Fail340;
                                      if(arg309.getSubterm(0) != a_196 && !a_196.match(arg309.getSubterm(0)))
                                        break Fail340;
                                      IStrategoTerm arg310 = arg309.getSubterm(1);
                                      if(arg310.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg310).getConstructor())
                                        break Fail340;
                                      c_196 = arg310.getSubterm(0);
                                      term = termFactory.makeTuple(b_196, c_196);
                                      term = leq$S_0_0.instance.invoke(context, term);
                                      if(term == null)
                                        break Fail340;
                                      term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{a_196, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_196})});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail340;
                                      term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{z_195, term});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail340;
                                      if(true)
                                        break Success289;
                                    }
                                    term = term146;
                                  }
                                  Success290:
                                  { 
                                    if(cons53 == Normalise._consOr_2)
                                    { 
                                      Fail341:
                                      { 
                                        IStrategoTerm g_196 = null;
                                        IStrategoTerm h_196 = null;
                                        IStrategoTerm i_196 = null;
                                        IStrategoTerm j_196 = null;
                                        IStrategoTerm arg311 = term.getSubterm(0);
                                        if(arg311.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg311).getConstructor())
                                          break Fail341;
                                        g_196 = arg311.getSubterm(0);
                                        IStrategoTerm arg312 = arg311.getSubterm(1);
                                        if(arg312.getTermType() != IStrategoTerm.APPL || Normalise._consLt_2 != ((IStrategoAppl)arg312).getConstructor())
                                          break Fail341;
                                        h_196 = arg312.getSubterm(0);
                                        IStrategoTerm arg313 = arg312.getSubterm(1);
                                        if(arg313.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg313).getConstructor())
                                          break Fail341;
                                        i_196 = arg313.getSubterm(0);
                                        IStrategoTerm arg314 = term.getSubterm(1);
                                        if(arg314.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg314).getConstructor())
                                          break Fail341;
                                        if(arg314.getSubterm(0) != h_196 && !h_196.match(arg314.getSubterm(0)))
                                          break Fail341;
                                        IStrategoTerm arg315 = arg314.getSubterm(1);
                                        if(arg315.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg315).getConstructor())
                                          break Fail341;
                                        j_196 = arg315.getSubterm(0);
                                        term = termFactory.makeTuple(i_196, j_196);
                                        term = gt$S_0_0.instance.invoke(context, term);
                                        if(term == null)
                                          break Fail341;
                                        term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{h_196, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_196})});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail341;
                                        term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{g_196, term});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail341;
                                        if(true)
                                          break Success290;
                                      }
                                      term = term146;
                                    }
                                    Success291:
                                    { 
                                      if(cons53 == Normalise._consOr_2)
                                      { 
                                        Fail342:
                                        { 
                                          IStrategoTerm n_196 = null;
                                          IStrategoTerm o_196 = null;
                                          IStrategoTerm p_196 = null;
                                          IStrategoTerm q_196 = null;
                                          IStrategoTerm r_196 = null;
                                          IStrategoTerm arg316 = term.getSubterm(0);
                                          if(arg316.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg316).getConstructor())
                                            break Fail342;
                                          n_196 = arg316.getSubterm(0);
                                          IStrategoTerm arg317 = arg316.getSubterm(1);
                                          if(arg317.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg317).getConstructor())
                                            break Fail342;
                                          o_196 = arg317.getSubterm(0);
                                          IStrategoTerm arg318 = arg317.getSubterm(1);
                                          if(arg318.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg318).getConstructor())
                                            break Fail342;
                                          p_196 = arg318.getSubterm(0);
                                          IStrategoTerm arg319 = term.getSubterm(1);
                                          if(arg319.getTermType() != IStrategoTerm.APPL || Normalise._consLeq_2 != ((IStrategoAppl)arg319).getConstructor())
                                            break Fail342;
                                          if(arg319.getSubterm(0) != o_196 && !o_196.match(arg319.getSubterm(0)))
                                            break Fail342;
                                          IStrategoTerm arg320 = arg319.getSubterm(1);
                                          if(arg320.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg320).getConstructor())
                                            break Fail342;
                                          q_196 = arg320.getSubterm(0);
                                          term = termFactory.makeTuple(p_196, q_196);
                                          term = maxstring_0_0.instance.invoke(context, term);
                                          if(term == null)
                                            break Fail342;
                                          r_196 = term;
                                          term = q_198.instance.invoke(context, r_196, s_198);
                                          if(term == null)
                                            break Fail342;
                                          term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{o_196, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail342;
                                          term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{n_196, term});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail342;
                                          if(true)
                                            break Success291;
                                        }
                                        term = term146;
                                      }
                                      Success292:
                                      { 
                                        if(cons53 == Normalise._consOr_2)
                                        { 
                                          Fail343:
                                          { 
                                            IStrategoTerm z_196 = null;
                                            IStrategoTerm a_197 = null;
                                            IStrategoTerm b_197 = null;
                                            IStrategoTerm arg321 = term.getSubterm(0);
                                            if(arg321.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg321).getConstructor())
                                              break Fail343;
                                            z_196 = arg321.getSubterm(0);
                                            IStrategoTerm arg322 = arg321.getSubterm(1);
                                            if(arg322.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg322).getConstructor())
                                              break Fail343;
                                            a_197 = arg322.getSubterm(0);
                                            IStrategoTerm arg323 = arg322.getSubterm(1);
                                            if(arg323.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg323).getConstructor())
                                              break Fail343;
                                            b_197 = arg323.getSubterm(0);
                                            IStrategoTerm arg324 = term.getSubterm(1);
                                            if(arg324.getTermType() != IStrategoTerm.APPL || Normalise._consEqu_2 != ((IStrategoAppl)arg324).getConstructor())
                                              break Fail343;
                                            if(arg324.getSubterm(0) != a_197 && !a_197.match(arg324.getSubterm(0)))
                                              break Fail343;
                                            IStrategoTerm arg325 = arg324.getSubterm(1);
                                            if(arg325.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg325).getConstructor())
                                              break Fail343;
                                            if(arg325.getSubterm(0) != b_197 && !b_197.match(arg325.getSubterm(0)))
                                              break Fail343;
                                            term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{a_197, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_197})});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail343;
                                            term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{z_196, term});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail343;
                                            if(true)
                                              break Success292;
                                          }
                                          term = term146;
                                        }
                                        Success293:
                                        { 
                                          if(cons53 == Normalise._consOr_2)
                                          { 
                                            Fail344:
                                            { 
                                              IStrategoTerm h_197 = null;
                                              IStrategoTerm i_197 = null;
                                              IStrategoTerm j_197 = null;
                                              IStrategoTerm k_197 = null;
                                              IStrategoTerm l_197 = null;
                                              IStrategoTerm arg326 = term.getSubterm(0);
                                              if(arg326.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg326).getConstructor())
                                                break Fail344;
                                              h_197 = arg326.getSubterm(0);
                                              IStrategoTerm arg327 = arg326.getSubterm(1);
                                              if(arg327.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg327).getConstructor())
                                                break Fail344;
                                              i_197 = arg327.getSubterm(0);
                                              IStrategoTerm arg328 = arg327.getSubterm(1);
                                              if(arg328.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg328).getConstructor())
                                                break Fail344;
                                              j_197 = arg328.getSubterm(0);
                                              IStrategoTerm arg329 = term.getSubterm(1);
                                              if(arg329.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg329).getConstructor())
                                                break Fail344;
                                              if(arg329.getSubterm(0) != i_197 && !i_197.match(arg329.getSubterm(0)))
                                                break Fail344;
                                              IStrategoTerm arg330 = arg329.getSubterm(1);
                                              if(arg330.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg330).getConstructor())
                                                break Fail344;
                                              k_197 = arg330.getSubterm(0);
                                              term = termFactory.makeTuple(j_197, k_197);
                                              term = minstring_0_0.instance.invoke(context, term);
                                              if(term == null)
                                                break Fail344;
                                              l_197 = term;
                                              term = q_198.instance.invoke(context, l_197, s_198);
                                              if(term == null)
                                                break Fail344;
                                              term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{i_197, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail344;
                                              term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{h_197, term});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail344;
                                              if(true)
                                                break Success293;
                                            }
                                            term = term146;
                                          }
                                          Success294:
                                          { 
                                            if(cons53 == Normalise._consOr_2)
                                            { 
                                              Fail345:
                                              { 
                                                IStrategoTerm r_197 = null;
                                                IStrategoTerm s_197 = null;
                                                IStrategoTerm t_197 = null;
                                                IStrategoTerm u_197 = null;
                                                IStrategoTerm arg331 = term.getSubterm(0);
                                                if(arg331.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg331).getConstructor())
                                                  break Fail345;
                                                r_197 = arg331.getSubterm(0);
                                                IStrategoTerm arg332 = arg331.getSubterm(1);
                                                if(arg332.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg332).getConstructor())
                                                  break Fail345;
                                                s_197 = arg332.getSubterm(0);
                                                IStrategoTerm arg333 = arg332.getSubterm(1);
                                                if(arg333.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg333).getConstructor())
                                                  break Fail345;
                                                t_197 = arg333.getSubterm(0);
                                                IStrategoTerm arg334 = term.getSubterm(1);
                                                if(arg334.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg334).getConstructor())
                                                  break Fail345;
                                                if(arg334.getSubterm(0) != s_197 && !s_197.match(arg334.getSubterm(0)))
                                                  break Fail345;
                                                IStrategoTerm arg335 = arg334.getSubterm(1);
                                                if(arg335.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg335).getConstructor())
                                                  break Fail345;
                                                u_197 = arg335.getSubterm(0);
                                                term = termFactory.makeTuple(t_197, u_197);
                                                term = leq$S_0_0.instance.invoke(context, term);
                                                if(term == null)
                                                  break Fail345;
                                                term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{s_197, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{t_197})});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail345;
                                                term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{r_197, term});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail345;
                                                if(true)
                                                  break Success294;
                                              }
                                              term = term146;
                                            }
                                            Success295:
                                            { 
                                              if(cons53 == Normalise._consOr_2)
                                              { 
                                                Fail346:
                                                { 
                                                  IStrategoTerm y_197 = null;
                                                  IStrategoTerm z_197 = null;
                                                  IStrategoTerm a_198 = null;
                                                  IStrategoTerm b_198 = null;
                                                  IStrategoTerm arg336 = term.getSubterm(0);
                                                  if(arg336.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg336).getConstructor())
                                                    break Fail346;
                                                  y_197 = arg336.getSubterm(0);
                                                  IStrategoTerm arg337 = arg336.getSubterm(1);
                                                  if(arg337.getTermType() != IStrategoTerm.APPL || Normalise._consGeq_2 != ((IStrategoAppl)arg337).getConstructor())
                                                    break Fail346;
                                                  z_197 = arg337.getSubterm(0);
                                                  IStrategoTerm arg338 = arg337.getSubterm(1);
                                                  if(arg338.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg338).getConstructor())
                                                    break Fail346;
                                                  a_198 = arg338.getSubterm(0);
                                                  IStrategoTerm arg339 = term.getSubterm(1);
                                                  if(arg339.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg339).getConstructor())
                                                    break Fail346;
                                                  if(arg339.getSubterm(0) != z_197 && !z_197.match(arg339.getSubterm(0)))
                                                    break Fail346;
                                                  IStrategoTerm arg340 = arg339.getSubterm(1);
                                                  if(arg340.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg340).getConstructor())
                                                    break Fail346;
                                                  b_198 = arg340.getSubterm(0);
                                                  term = termFactory.makeTuple(a_198, b_198);
                                                  term = gt$S_0_0.instance.invoke(context, term);
                                                  if(term == null)
                                                    break Fail346;
                                                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{z_197, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{b_198})});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail346;
                                                  term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{y_197, term});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail346;
                                                  if(true)
                                                    break Success295;
                                                }
                                                term = term146;
                                              }
                                              if(cons53 == Normalise._consOr_2)
                                              { 
                                                IStrategoTerm g_198 = null;
                                                IStrategoTerm h_198 = null;
                                                IStrategoTerm i_198 = null;
                                                IStrategoTerm j_198 = null;
                                                IStrategoTerm k_198 = null;
                                                IStrategoTerm arg341 = term.getSubterm(0);
                                                if(arg341.getTermType() != IStrategoTerm.APPL || Normalise._consOr_2 != ((IStrategoAppl)arg341).getConstructor())
                                                  break Fail327;
                                                g_198 = arg341.getSubterm(0);
                                                IStrategoTerm arg342 = arg341.getSubterm(1);
                                                if(arg342.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg342).getConstructor())
                                                  break Fail327;
                                                h_198 = arg342.getSubterm(0);
                                                IStrategoTerm arg343 = arg342.getSubterm(1);
                                                if(arg343.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg343).getConstructor())
                                                  break Fail327;
                                                i_198 = arg343.getSubterm(0);
                                                IStrategoTerm arg344 = term.getSubterm(1);
                                                if(arg344.getTermType() != IStrategoTerm.APPL || Normalise._consGt_2 != ((IStrategoAppl)arg344).getConstructor())
                                                  break Fail327;
                                                if(arg344.getSubterm(0) != h_198 && !h_198.match(arg344.getSubterm(0)))
                                                  break Fail327;
                                                IStrategoTerm arg345 = arg344.getSubterm(1);
                                                if(arg345.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg345).getConstructor())
                                                  break Fail327;
                                                j_198 = arg345.getSubterm(0);
                                                term = termFactory.makeTuple(i_198, j_198);
                                                term = minstring_0_0.instance.invoke(context, term);
                                                if(term == null)
                                                  break Fail327;
                                                k_198 = term;
                                                term = q_198.instance.invoke(context, k_198, s_198);
                                                if(term == null)
                                                  break Fail327;
                                                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{h_198, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail327;
                                                term = termFactory.makeAppl(Normalise._consOr_2, new IStrategoTerm[]{g_198, term});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail327;
                                              }
                                              else
                                              { 
                                                break Fail327;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class canonical_0_0_fragment_1 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail347:
      { 
        IStrategoTerm term74 = term;
        IStrategoConstructor cons54 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success296:
        { 
          if(cons54 == Normalise._consAdd_2)
          { 
            Fail348:
            { 
              IStrategoTerm l_177 = null;
              IStrategoTerm p_177 = null;
              IStrategoTerm u_177 = null;
              l_177 = term.getSubterm(0);
              p_177 = term.getSubterm(1);
              term = p_177;
              IStrategoTerm term75 = term;
              Success297:
              { 
                Fail349:
                { 
                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                    break Fail349;
                  { 
                    if(true)
                      break Fail348;
                    if(true)
                      break Success297;
                  }
                }
                term = term75;
              }
              term = p_177;
              IStrategoTerm term76 = term;
              Success298:
              { 
                Fail350:
                { 
                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)term).getConstructor())
                    break Fail350;
                  IStrategoTerm arg109 = term.getSubterm(1);
                  if(arg109.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg109).getConstructor())
                    break Fail350;
                  { 
                    if(true)
                      break Fail348;
                    if(true)
                      break Success298;
                  }
                }
                term = term76;
              }
              term = p_177;
              IStrategoTerm term77 = term;
              Success299:
              { 
                Fail351:
                { 
                  if(term.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)term).getConstructor())
                    break Fail351;
                  { 
                    if(true)
                      break Fail348;
                    if(true)
                      break Success299;
                  }
                }
                term = term77;
              }
              u_177 = term;
              term = get_option_0_1.instance.invoke(context, u_177, Normalise.constMerge_complex_multiply0);
              if(term == null)
                break Fail348;
              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{p_177, Normalise.constInt1});
              term = s_198.invoke(context, term);
              if(term == null)
                break Fail348;
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{l_177, term});
              term = s_198.invoke(context, term);
              if(term == null)
                break Fail348;
              if(true)
                break Success296;
            }
            term = term74;
          }
          Success300:
          { 
            if(cons54 == Normalise._consLt_2)
            { 
              Fail352:
              { 
                IStrategoTerm x_177 = null;
                IStrategoTerm y_177 = null;
                IStrategoTerm arg110 = term.getSubterm(0);
                if(arg110.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg110).getConstructor())
                  break Fail352;
                y_177 = arg110.getSubterm(0);
                x_177 = term.getSubterm(1);
                term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{x_177, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{y_177})});
                term = s_198.invoke(context, term);
                if(term == null)
                  break Fail352;
                if(true)
                  break Success300;
              }
              term = term74;
            }
            Success301:
            { 
              if(cons54 == Normalise._consLeq_2)
              { 
                Fail353:
                { 
                  IStrategoTerm z_177 = null;
                  IStrategoTerm a_178 = null;
                  IStrategoTerm arg111 = term.getSubterm(0);
                  if(arg111.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg111).getConstructor())
                    break Fail353;
                  a_178 = arg111.getSubterm(0);
                  z_177 = term.getSubterm(1);
                  term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{z_177, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{a_178})});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail353;
                  if(true)
                    break Success301;
                }
                term = term74;
              }
              Success302:
              { 
                if(cons54 == Normalise._consEqu_2)
                { 
                  Fail354:
                  { 
                    IStrategoTerm b_178 = null;
                    IStrategoTerm c_178 = null;
                    IStrategoTerm arg112 = term.getSubterm(0);
                    if(arg112.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg112).getConstructor())
                      break Fail354;
                    c_178 = arg112.getSubterm(0);
                    b_178 = term.getSubterm(1);
                    term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{b_178, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{c_178})});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail354;
                    if(true)
                      break Success302;
                  }
                  term = term74;
                }
                Success303:
                { 
                  if(cons54 == Normalise._consGt_2)
                  { 
                    Fail355:
                    { 
                      IStrategoTerm d_178 = null;
                      IStrategoTerm e_178 = null;
                      IStrategoTerm arg113 = term.getSubterm(0);
                      if(arg113.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg113).getConstructor())
                        break Fail355;
                      e_178 = arg113.getSubterm(0);
                      d_178 = term.getSubterm(1);
                      term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{d_178, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_178})});
                      term = s_198.invoke(context, term);
                      if(term == null)
                        break Fail355;
                      if(true)
                        break Success303;
                    }
                    term = term74;
                  }
                  Success304:
                  { 
                    if(cons54 == Normalise._consGeq_2)
                    { 
                      Fail356:
                      { 
                        IStrategoTerm f_178 = null;
                        IStrategoTerm g_178 = null;
                        IStrategoTerm arg114 = term.getSubterm(0);
                        if(arg114.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg114).getConstructor())
                          break Fail356;
                        g_178 = arg114.getSubterm(0);
                        f_178 = term.getSubterm(1);
                        term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{f_178, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{g_178})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail356;
                        if(true)
                          break Success304;
                      }
                      term = term74;
                    }
                    Success305:
                    { 
                      if(cons54 == Normalise._consNeq_2)
                      { 
                        Fail357:
                        { 
                          IStrategoTerm h_178 = null;
                          IStrategoTerm i_178 = null;
                          IStrategoTerm arg115 = term.getSubterm(0);
                          if(arg115.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg115).getConstructor())
                            break Fail357;
                          i_178 = arg115.getSubterm(0);
                          h_178 = term.getSubterm(1);
                          term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{h_178, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{i_178})});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail357;
                          if(true)
                            break Success305;
                        }
                        term = term74;
                      }
                      Success306:
                      { 
                        if(cons54 == Normalise._consLt_2)
                        { 
                          Fail358:
                          { 
                            IStrategoTerm j_178 = null;
                            IStrategoTerm k_178 = null;
                            IStrategoTerm l_178 = null;
                            IStrategoTerm arg116 = term.getSubterm(0);
                            if(arg116.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg116).getConstructor())
                              break Fail358;
                            j_178 = arg116.getSubterm(0);
                            IStrategoTerm arg117 = arg116.getSubterm(1);
                            if(arg117.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg117).getConstructor())
                              break Fail358;
                            l_178 = arg117.getSubterm(0);
                            k_178 = term.getSubterm(1);
                            term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_178})});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail358;
                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{k_178, term});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail358;
                            term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{j_178, term});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail358;
                            if(true)
                              break Success306;
                          }
                          term = term74;
                        }
                        Success307:
                        { 
                          if(cons54 == Normalise._consLeq_2)
                          { 
                            Fail359:
                            { 
                              IStrategoTerm v_178 = null;
                              IStrategoTerm w_178 = null;
                              IStrategoTerm x_178 = null;
                              IStrategoTerm arg118 = term.getSubterm(0);
                              if(arg118.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg118).getConstructor())
                                break Fail359;
                              v_178 = arg118.getSubterm(0);
                              IStrategoTerm arg119 = arg118.getSubterm(1);
                              if(arg119.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg119).getConstructor())
                                break Fail359;
                              x_178 = arg119.getSubterm(0);
                              w_178 = term.getSubterm(1);
                              term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{x_178})});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail359;
                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{w_178, term});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail359;
                              term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{v_178, term});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail359;
                              if(true)
                                break Success307;
                            }
                            term = term74;
                          }
                          Success308:
                          { 
                            if(cons54 == Normalise._consEqu_2)
                            { 
                              Fail360:
                              { 
                                IStrategoTerm c_179 = null;
                                IStrategoTerm d_179 = null;
                                IStrategoTerm e_179 = null;
                                IStrategoTerm arg120 = term.getSubterm(0);
                                if(arg120.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg120).getConstructor())
                                  break Fail360;
                                c_179 = arg120.getSubterm(0);
                                IStrategoTerm arg121 = arg120.getSubterm(1);
                                if(arg121.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg121).getConstructor())
                                  break Fail360;
                                e_179 = arg121.getSubterm(0);
                                d_179 = term.getSubterm(1);
                                term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{e_179})});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail360;
                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_179, term});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail360;
                                term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{c_179, term});
                                term = s_198.invoke(context, term);
                                if(term == null)
                                  break Fail360;
                                if(true)
                                  break Success308;
                              }
                              term = term74;
                            }
                            Success309:
                            { 
                              if(cons54 == Normalise._consGt_2)
                              { 
                                Fail361:
                                { 
                                  IStrategoTerm j_179 = null;
                                  IStrategoTerm k_179 = null;
                                  IStrategoTerm l_179 = null;
                                  IStrategoTerm arg122 = term.getSubterm(0);
                                  if(arg122.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg122).getConstructor())
                                    break Fail361;
                                  j_179 = arg122.getSubterm(0);
                                  IStrategoTerm arg123 = arg122.getSubterm(1);
                                  if(arg123.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg123).getConstructor())
                                    break Fail361;
                                  l_179 = arg123.getSubterm(0);
                                  k_179 = term.getSubterm(1);
                                  term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{l_179})});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail361;
                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{k_179, term});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail361;
                                  term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{j_179, term});
                                  term = s_198.invoke(context, term);
                                  if(term == null)
                                    break Fail361;
                                  if(true)
                                    break Success309;
                                }
                                term = term74;
                              }
                              Success310:
                              { 
                                if(cons54 == Normalise._consGeq_2)
                                { 
                                  Fail362:
                                  { 
                                    IStrategoTerm q_179 = null;
                                    IStrategoTerm r_179 = null;
                                    IStrategoTerm s_179 = null;
                                    IStrategoTerm arg124 = term.getSubterm(0);
                                    if(arg124.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg124).getConstructor())
                                      break Fail362;
                                    q_179 = arg124.getSubterm(0);
                                    IStrategoTerm arg125 = arg124.getSubterm(1);
                                    if(arg125.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg125).getConstructor())
                                      break Fail362;
                                    s_179 = arg125.getSubterm(0);
                                    r_179 = term.getSubterm(1);
                                    term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{s_179})});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail362;
                                    term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{r_179, term});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail362;
                                    term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{q_179, term});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail362;
                                    if(true)
                                      break Success310;
                                  }
                                  term = term74;
                                }
                                Success311:
                                { 
                                  if(cons54 == Normalise._consNeq_2)
                                  { 
                                    Fail363:
                                    { 
                                      IStrategoTerm x_179 = null;
                                      IStrategoTerm y_179 = null;
                                      IStrategoTerm z_179 = null;
                                      IStrategoTerm arg126 = term.getSubterm(0);
                                      if(arg126.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg126).getConstructor())
                                        break Fail363;
                                      x_179 = arg126.getSubterm(0);
                                      IStrategoTerm arg127 = arg126.getSubterm(1);
                                      if(arg127.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg127).getConstructor())
                                        break Fail363;
                                      z_179 = arg127.getSubterm(0);
                                      y_179 = term.getSubterm(1);
                                      term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{z_179})});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail363;
                                      term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{y_179, term});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail363;
                                      term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{x_179, term});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail363;
                                      if(true)
                                        break Success311;
                                    }
                                    term = term74;
                                  }
                                  Success312:
                                  { 
                                    if(cons54 == Normalise._consLt_2)
                                    { 
                                      Fail364:
                                      { 
                                        IStrategoTerm e_180 = null;
                                        IStrategoTerm f_180 = null;
                                        IStrategoTerm g_180 = null;
                                        e_180 = term.getSubterm(0);
                                        IStrategoTerm arg128 = term.getSubterm(1);
                                        if(arg128.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg128).getConstructor())
                                          break Fail364;
                                        f_180 = arg128.getSubterm(0);
                                        g_180 = arg128.getSubterm(1);
                                        term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{f_180});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail364;
                                        term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{e_180, term});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail364;
                                        term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{term, g_180});
                                        term = s_198.invoke(context, term);
                                        if(term == null)
                                          break Fail364;
                                        if(true)
                                          break Success312;
                                      }
                                      term = term74;
                                    }
                                    Success313:
                                    { 
                                      if(cons54 == Normalise._consLeq_2)
                                      { 
                                        Fail365:
                                        { 
                                          IStrategoTerm l_180 = null;
                                          IStrategoTerm m_180 = null;
                                          IStrategoTerm n_180 = null;
                                          l_180 = term.getSubterm(0);
                                          IStrategoTerm arg129 = term.getSubterm(1);
                                          if(arg129.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg129).getConstructor())
                                            break Fail365;
                                          m_180 = arg129.getSubterm(0);
                                          n_180 = arg129.getSubterm(1);
                                          term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{m_180});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail365;
                                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{l_180, term});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail365;
                                          term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{term, n_180});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail365;
                                          if(true)
                                            break Success313;
                                        }
                                        term = term74;
                                      }
                                      Success314:
                                      { 
                                        if(cons54 == Normalise._consEqu_2)
                                        { 
                                          Fail366:
                                          { 
                                            IStrategoTerm u_180 = null;
                                            IStrategoTerm v_180 = null;
                                            IStrategoTerm d_181 = null;
                                            u_180 = term.getSubterm(0);
                                            IStrategoTerm arg130 = term.getSubterm(1);
                                            if(arg130.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg130).getConstructor())
                                              break Fail366;
                                            v_180 = arg130.getSubterm(0);
                                            d_181 = arg130.getSubterm(1);
                                            term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{v_180});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail366;
                                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{u_180, term});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail366;
                                            term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{term, d_181});
                                            term = s_198.invoke(context, term);
                                            if(term == null)
                                              break Fail366;
                                            if(true)
                                              break Success314;
                                          }
                                          term = term74;
                                        }
                                        Success315:
                                        { 
                                          if(cons54 == Normalise._consGt_2)
                                          { 
                                            Fail367:
                                            { 
                                              IStrategoTerm i_181 = null;
                                              IStrategoTerm j_181 = null;
                                              IStrategoTerm k_181 = null;
                                              i_181 = term.getSubterm(0);
                                              IStrategoTerm arg131 = term.getSubterm(1);
                                              if(arg131.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg131).getConstructor())
                                                break Fail367;
                                              j_181 = arg131.getSubterm(0);
                                              k_181 = arg131.getSubterm(1);
                                              term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{j_181});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail367;
                                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{i_181, term});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail367;
                                              term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{term, k_181});
                                              term = s_198.invoke(context, term);
                                              if(term == null)
                                                break Fail367;
                                              if(true)
                                                break Success315;
                                            }
                                            term = term74;
                                          }
                                          Success316:
                                          { 
                                            if(cons54 == Normalise._consGeq_2)
                                            { 
                                              Fail368:
                                              { 
                                                IStrategoTerm p_181 = null;
                                                IStrategoTerm q_181 = null;
                                                IStrategoTerm r_181 = null;
                                                p_181 = term.getSubterm(0);
                                                IStrategoTerm arg132 = term.getSubterm(1);
                                                if(arg132.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg132).getConstructor())
                                                  break Fail368;
                                                q_181 = arg132.getSubterm(0);
                                                r_181 = arg132.getSubterm(1);
                                                term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{q_181});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail368;
                                                term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{p_181, term});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail368;
                                                term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{term, r_181});
                                                term = s_198.invoke(context, term);
                                                if(term == null)
                                                  break Fail368;
                                                if(true)
                                                  break Success316;
                                              }
                                              term = term74;
                                            }
                                            Success317:
                                            { 
                                              if(cons54 == Normalise._consNeq_2)
                                              { 
                                                Fail369:
                                                { 
                                                  IStrategoTerm w_181 = null;
                                                  IStrategoTerm x_181 = null;
                                                  IStrategoTerm y_181 = null;
                                                  w_181 = term.getSubterm(0);
                                                  IStrategoTerm arg133 = term.getSubterm(1);
                                                  if(arg133.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg133).getConstructor())
                                                    break Fail369;
                                                  x_181 = arg133.getSubterm(0);
                                                  y_181 = arg133.getSubterm(1);
                                                  term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{x_181});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail369;
                                                  term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{w_181, term});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail369;
                                                  term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{term, y_181});
                                                  term = s_198.invoke(context, term);
                                                  if(term == null)
                                                    break Fail369;
                                                  if(true)
                                                    break Success317;
                                                }
                                                term = term74;
                                              }
                                              Success318:
                                              { 
                                                if(cons54 == Normalise._consLt_2)
                                                { 
                                                  Fail370:
                                                  { 
                                                    IStrategoTerm d_182 = null;
                                                    IStrategoTerm e_182 = null;
                                                    d_182 = term.getSubterm(0);
                                                    e_182 = term.getSubterm(1);
                                                    term = e_182;
                                                    IStrategoTerm term97 = term;
                                                    Success319:
                                                    { 
                                                      Fail371:
                                                      { 
                                                        if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                          break Fail371;
                                                        { 
                                                          if(true)
                                                            break Fail370;
                                                          if(true)
                                                            break Success319;
                                                        }
                                                      }
                                                      term = term97;
                                                    }
                                                    term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{e_182});
                                                    term = s_198.invoke(context, term);
                                                    if(term == null)
                                                      break Fail370;
                                                    term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{d_182, term});
                                                    term = s_198.invoke(context, term);
                                                    if(term == null)
                                                      break Fail370;
                                                    term = termFactory.makeAppl(Normalise._consLt_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                    term = s_198.invoke(context, term);
                                                    if(term == null)
                                                      break Fail370;
                                                    if(true)
                                                      break Success318;
                                                  }
                                                  term = term74;
                                                }
                                                Success320:
                                                { 
                                                  if(cons54 == Normalise._consLeq_2)
                                                  { 
                                                    Fail372:
                                                    { 
                                                      IStrategoTerm l_182 = null;
                                                      IStrategoTerm m_182 = null;
                                                      l_182 = term.getSubterm(0);
                                                      m_182 = term.getSubterm(1);
                                                      term = m_182;
                                                      IStrategoTerm term99 = term;
                                                      Success321:
                                                      { 
                                                        Fail373:
                                                        { 
                                                          if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                            break Fail373;
                                                          { 
                                                            if(true)
                                                              break Fail372;
                                                            if(true)
                                                              break Success321;
                                                          }
                                                        }
                                                        term = term99;
                                                      }
                                                      term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{m_182});
                                                      term = s_198.invoke(context, term);
                                                      if(term == null)
                                                        break Fail372;
                                                      term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{l_182, term});
                                                      term = s_198.invoke(context, term);
                                                      if(term == null)
                                                        break Fail372;
                                                      term = termFactory.makeAppl(Normalise._consLeq_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                      term = s_198.invoke(context, term);
                                                      if(term == null)
                                                        break Fail372;
                                                      if(true)
                                                        break Success320;
                                                    }
                                                    term = term74;
                                                  }
                                                  Success322:
                                                  { 
                                                    if(cons54 == Normalise._consEqu_2)
                                                    { 
                                                      Fail374:
                                                      { 
                                                        IStrategoTerm t_182 = null;
                                                        IStrategoTerm u_182 = null;
                                                        t_182 = term.getSubterm(0);
                                                        u_182 = term.getSubterm(1);
                                                        term = u_182;
                                                        IStrategoTerm term101 = term;
                                                        Success323:
                                                        { 
                                                          Fail375:
                                                          { 
                                                            if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                              break Fail375;
                                                            { 
                                                              if(true)
                                                                break Fail374;
                                                              if(true)
                                                                break Success323;
                                                            }
                                                          }
                                                          term = term101;
                                                        }
                                                        term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{u_182});
                                                        term = s_198.invoke(context, term);
                                                        if(term == null)
                                                          break Fail374;
                                                        term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{t_182, term});
                                                        term = s_198.invoke(context, term);
                                                        if(term == null)
                                                          break Fail374;
                                                        term = termFactory.makeAppl(Normalise._consEqu_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                        term = s_198.invoke(context, term);
                                                        if(term == null)
                                                          break Fail374;
                                                        if(true)
                                                          break Success322;
                                                      }
                                                      term = term74;
                                                    }
                                                    Success324:
                                                    { 
                                                      if(cons54 == Normalise._consGt_2)
                                                      { 
                                                        Fail376:
                                                        { 
                                                          IStrategoTerm e_183 = null;
                                                          IStrategoTerm f_183 = null;
                                                          e_183 = term.getSubterm(0);
                                                          f_183 = term.getSubterm(1);
                                                          term = f_183;
                                                          IStrategoTerm term103 = term;
                                                          Success325:
                                                          { 
                                                            Fail377:
                                                            { 
                                                              if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                break Fail377;
                                                              { 
                                                                if(true)
                                                                  break Fail376;
                                                                if(true)
                                                                  break Success325;
                                                              }
                                                            }
                                                            term = term103;
                                                          }
                                                          term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{f_183});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail376;
                                                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{e_183, term});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail376;
                                                          term = termFactory.makeAppl(Normalise._consGt_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail376;
                                                          if(true)
                                                            break Success324;
                                                        }
                                                        term = term74;
                                                      }
                                                      Success326:
                                                      { 
                                                        if(cons54 == Normalise._consGeq_2)
                                                        { 
                                                          Fail378:
                                                          { 
                                                            IStrategoTerm m_183 = null;
                                                            IStrategoTerm n_183 = null;
                                                            m_183 = term.getSubterm(0);
                                                            n_183 = term.getSubterm(1);
                                                            term = n_183;
                                                            IStrategoTerm term105 = term;
                                                            Success327:
                                                            { 
                                                              Fail379:
                                                              { 
                                                                if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                  break Fail379;
                                                                { 
                                                                  if(true)
                                                                    break Fail378;
                                                                  if(true)
                                                                    break Success327;
                                                                }
                                                              }
                                                              term = term105;
                                                            }
                                                            term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{n_183});
                                                            term = s_198.invoke(context, term);
                                                            if(term == null)
                                                              break Fail378;
                                                            term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{m_183, term});
                                                            term = s_198.invoke(context, term);
                                                            if(term == null)
                                                              break Fail378;
                                                            term = termFactory.makeAppl(Normalise._consGeq_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                            term = s_198.invoke(context, term);
                                                            if(term == null)
                                                              break Fail378;
                                                            if(true)
                                                              break Success326;
                                                          }
                                                          term = term74;
                                                        }
                                                        if(cons54 == Normalise._consNeq_2)
                                                        { 
                                                          IStrategoTerm u_183 = null;
                                                          IStrategoTerm v_183 = null;
                                                          u_183 = term.getSubterm(0);
                                                          v_183 = term.getSubterm(1);
                                                          term = v_183;
                                                          IStrategoTerm term106 = term;
                                                          Success328:
                                                          { 
                                                            Fail380:
                                                            { 
                                                              if(term.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)term).getConstructor())
                                                                break Fail380;
                                                              { 
                                                                if(true)
                                                                  break Fail347;
                                                                if(true)
                                                                  break Success328;
                                                              }
                                                            }
                                                            term = term106;
                                                          }
                                                          term = termFactory.makeAppl(Normalise._consNeg_1, new IStrategoTerm[]{v_183});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail347;
                                                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{u_183, term});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail347;
                                                          term = termFactory.makeAppl(Normalise._consNeq_2, new IStrategoTerm[]{term, Normalise.constInt2});
                                                          term = s_198.invoke(context, term);
                                                          if(term == null)
                                                            break Fail347;
                                                        }
                                                        else
                                                        { 
                                                          break Fail347;
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class canonical_0_0_fragment_0 extends Strategy 
  { 
    Strategy s_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      ITermFactory termFactory = context.getFactory();
      Fail381:
      { 
        IStrategoTerm term18 = term;
        IStrategoConstructor cons64 = term.getTermType() == IStrategoTerm.APPL ? ((IStrategoAppl)term).getConstructor() : null;
        Success329:
        { 
          if(cons64 == Normalise._consAdd_2)
          { 
            Fail382:
            { 
              IStrategoTerm v_168 = null;
              IStrategoTerm w_168 = null;
              IStrategoTerm x_168 = null;
              IStrategoTerm y_168 = null;
              IStrategoTerm arg15 = term.getSubterm(0);
              if(arg15.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg15).getConstructor())
                break Fail382;
              v_168 = arg15.getSubterm(0);
              IStrategoTerm arg16 = arg15.getSubterm(1);
              if(arg16.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg16).getConstructor())
                break Fail382;
              w_168 = arg16.getSubterm(0);
              IStrategoTerm arg17 = term.getSubterm(1);
              if(arg17.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg17).getConstructor())
                break Fail382;
              x_168 = arg17.getSubterm(0);
              term = termFactory.makeTuple(w_168, x_168);
              term = add$S_0_0.instance.invoke(context, term);
              if(term == null)
                break Fail382;
              y_168 = term;
              term = q_198.instance.invoke(context, y_168, s_198);
              if(term == null)
                break Fail382;
              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{v_168, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
              term = s_198.invoke(context, term);
              if(term == null)
                break Fail382;
              if(true)
                break Success329;
            }
            term = term18;
          }
          Success330:
          { 
            if(cons64 == Normalise._consMul_2)
            { 
              Fail383:
              { 
                IStrategoTerm c_169 = null;
                IStrategoTerm d_169 = null;
                IStrategoTerm e_169 = null;
                IStrategoTerm arg18 = term.getSubterm(0);
                if(arg18.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg18).getConstructor())
                  break Fail383;
                c_169 = arg18.getSubterm(0);
                IStrategoTerm arg19 = term.getSubterm(1);
                if(arg19.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg19).getConstructor())
                  break Fail383;
                d_169 = arg19.getSubterm(0);
                term = termFactory.makeTuple(c_169, d_169);
                term = mul$S_0_0.instance.invoke(context, term);
                if(term == null)
                  break Fail383;
                e_169 = term;
                term = q_198.instance.invoke(context, e_169, s_198);
                if(term == null)
                  break Fail383;
                term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                if(true)
                  break Success330;
              }
              term = term18;
            }
            Success331:
            { 
              if(cons64 == Normalise._consMul_2)
              { 
                Fail384:
                { 
                  IStrategoTerm i_169 = null;
                  IStrategoTerm j_169 = null;
                  IStrategoTerm k_169 = null;
                  IStrategoTerm l_169 = null;
                  IStrategoTerm arg20 = term.getSubterm(0);
                  if(arg20.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg20).getConstructor())
                    break Fail384;
                  i_169 = arg20.getSubterm(0);
                  IStrategoTerm arg21 = arg20.getSubterm(1);
                  if(arg21.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg21).getConstructor())
                    break Fail384;
                  j_169 = arg21.getSubterm(0);
                  IStrategoTerm arg22 = term.getSubterm(1);
                  if(arg22.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg22).getConstructor())
                    break Fail384;
                  k_169 = arg22.getSubterm(0);
                  term = termFactory.makeTuple(j_169, k_169);
                  term = mul$S_0_0.instance.invoke(context, term);
                  if(term == null)
                    break Fail384;
                  l_169 = term;
                  term = q_198.instance.invoke(context, l_169, s_198);
                  if(term == null)
                    break Fail384;
                  term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{i_169, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                  term = s_198.invoke(context, term);
                  if(term == null)
                    break Fail384;
                  if(true)
                    break Success331;
                }
                term = term18;
              }
              Success332:
              { 
                if(cons64 == Normalise._consMul_2)
                { 
                  Fail385:
                  { 
                    IStrategoTerm p_169 = null;
                    IStrategoTerm q_169 = null;
                    IStrategoTerm arg23 = term.getSubterm(0);
                    if(arg23.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg23).getConstructor())
                      break Fail385;
                    p_169 = arg23.getSubterm(0);
                    q_169 = arg23.getSubterm(1);
                    IStrategoTerm arg24 = term.getSubterm(1);
                    if(arg24.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg24).getConstructor())
                      break Fail385;
                    IStrategoTerm arg25 = arg24.getSubterm(0);
                    if(arg25.getTermType() != IStrategoTerm.STRING || !"-1".equals(((IStrategoString)arg25).stringValue()))
                      break Fail385;
                    term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{p_169, Normalise.constInt0});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail385;
                    term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{term, q_169});
                    term = s_198.invoke(context, term);
                    if(term == null)
                      break Fail385;
                    if(true)
                      break Success332;
                  }
                  term = term18;
                }
                Success333:
                { 
                  if(cons64 == Normalise._consDiv_2)
                  { 
                    Fail386:
                    { 
                      IStrategoTerm t_169 = null;
                      IStrategoTerm u_169 = null;
                      IStrategoTerm v_169 = null;
                      IStrategoTerm arg26 = term.getSubterm(0);
                      if(arg26.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg26).getConstructor())
                        break Fail386;
                      t_169 = arg26.getSubterm(0);
                      IStrategoTerm arg27 = term.getSubterm(1);
                      if(arg27.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg27).getConstructor())
                        break Fail386;
                      u_169 = arg27.getSubterm(0);
                      term = termFactory.makeTuple(t_169, u_169);
                      term = mod$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail386;
                      if(term.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)term).stringValue()))
                        break Fail386;
                      term = termFactory.makeTuple(t_169, u_169);
                      term = div$S_0_0.instance.invoke(context, term);
                      if(term == null)
                        break Fail386;
                      v_169 = term;
                      term = q_198.instance.invoke(context, v_169, s_198);
                      if(term == null)
                        break Fail386;
                      term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                      if(true)
                        break Success333;
                    }
                    term = term18;
                  }
                  Success334:
                  { 
                    if(cons64 == Normalise._consDiv_2)
                    { 
                      Fail387:
                      { 
                        IStrategoTerm z_169 = null;
                        IStrategoTerm b_170 = null;
                        IStrategoTerm c_170 = null;
                        IStrategoTerm d_170 = null;
                        IStrategoTerm arg28 = term.getSubterm(0);
                        if(arg28.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg28).getConstructor())
                          break Fail387;
                        z_169 = arg28.getSubterm(0);
                        IStrategoTerm arg29 = arg28.getSubterm(1);
                        if(arg29.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg29).getConstructor())
                          break Fail387;
                        b_170 = arg29.getSubterm(0);
                        IStrategoTerm arg30 = term.getSubterm(1);
                        if(arg30.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg30).getConstructor())
                          break Fail387;
                        c_170 = arg30.getSubterm(0);
                        term = termFactory.makeTuple(b_170, c_170);
                        term = mod$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail387;
                        if(term.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)term).stringValue()))
                          break Fail387;
                        term = termFactory.makeTuple(b_170, c_170);
                        term = div$S_0_0.instance.invoke(context, term);
                        if(term == null)
                          break Fail387;
                        d_170 = term;
                        term = q_198.instance.invoke(context, d_170, s_198);
                        if(term == null)
                          break Fail387;
                        term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{z_169, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                        term = s_198.invoke(context, term);
                        if(term == null)
                          break Fail387;
                        if(true)
                          break Success334;
                      }
                      term = term18;
                    }
                    Success335:
                    { 
                      if(cons64 == Normalise._consMul_2)
                      { 
                        Fail388:
                        { 
                          IStrategoTerm h_170 = null;
                          IStrategoTerm i_170 = null;
                          IStrategoTerm j_170 = null;
                          IStrategoTerm k_170 = null;
                          IStrategoTerm n_170 = null;
                          IStrategoTerm arg31 = term.getSubterm(0);
                          if(arg31.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg31).getConstructor())
                            break Fail388;
                          h_170 = arg31.getSubterm(0);
                          IStrategoTerm arg32 = arg31.getSubterm(1);
                          if(arg32.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg32).getConstructor())
                            break Fail388;
                          i_170 = arg32.getSubterm(0);
                          IStrategoTerm arg33 = term.getSubterm(1);
                          if(arg33.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg33).getConstructor())
                            break Fail388;
                          j_170 = arg33.getSubterm(0);
                          term = termFactory.makeTuple(i_170, j_170);
                          term = mul$S_0_0.instance.invoke(context, term);
                          if(term == null)
                            break Fail388;
                          k_170 = term;
                          term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{h_170, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{j_170})});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail388;
                          n_170 = term;
                          term = q_198.instance.invoke(context, k_170, s_198);
                          if(term == null)
                            break Fail388;
                          term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{n_170, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                          term = s_198.invoke(context, term);
                          if(term == null)
                            break Fail388;
                          if(true)
                            break Success335;
                        }
                        term = term18;
                      }
                      Success336:
                      { 
                        if(cons64 == Normalise._consAdd_2)
                        { 
                          Fail389:
                          { 
                            IStrategoTerm s_170 = null;
                            IStrategoTerm t_170 = null;
                            IStrategoTerm u_170 = null;
                            IStrategoTerm v_170 = null;
                            IStrategoTerm arg34 = term.getSubterm(0);
                            if(arg34.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg34).getConstructor())
                              break Fail389;
                            s_170 = arg34.getSubterm(0);
                            IStrategoTerm arg35 = arg34.getSubterm(1);
                            if(arg35.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg35).getConstructor())
                              break Fail389;
                            t_170 = arg35.getSubterm(0);
                            IStrategoTerm arg36 = term.getSubterm(1);
                            if(arg36.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg36).getConstructor())
                              break Fail389;
                            if(arg36.getSubterm(0) != s_170 && !s_170.match(arg36.getSubterm(0)))
                              break Fail389;
                            IStrategoTerm arg37 = arg36.getSubterm(1);
                            if(arg37.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg37).getConstructor())
                              break Fail389;
                            u_170 = arg37.getSubterm(0);
                            term = termFactory.makeTuple(t_170, u_170);
                            term = add$S_0_0.instance.invoke(context, term);
                            if(term == null)
                              break Fail389;
                            v_170 = term;
                            term = q_198.instance.invoke(context, v_170, s_198);
                            if(term == null)
                              break Fail389;
                            term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{s_170, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                            term = s_198.invoke(context, term);
                            if(term == null)
                              break Fail389;
                            if(true)
                              break Success336;
                          }
                          term = term18;
                        }
                        Success337:
                        { 
                          if(cons64 == Normalise._consAdd_2)
                          { 
                            Fail390:
                            { 
                              IStrategoTerm f_171 = null;
                              IStrategoTerm g_171 = null;
                              IStrategoTerm h_171 = null;
                              IStrategoTerm i_171 = null;
                              IStrategoTerm j_171 = null;
                              IStrategoTerm arg38 = term.getSubterm(0);
                              if(arg38.getTermType() != IStrategoTerm.APPL || Normalise._consAdd_2 != ((IStrategoAppl)arg38).getConstructor())
                                break Fail390;
                              f_171 = arg38.getSubterm(0);
                              IStrategoTerm arg39 = arg38.getSubterm(1);
                              if(arg39.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg39).getConstructor())
                                break Fail390;
                              g_171 = arg39.getSubterm(0);
                              IStrategoTerm arg40 = arg39.getSubterm(1);
                              if(arg40.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg40).getConstructor())
                                break Fail390;
                              h_171 = arg40.getSubterm(0);
                              IStrategoTerm arg41 = term.getSubterm(1);
                              if(arg41.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg41).getConstructor())
                                break Fail390;
                              if(arg41.getSubterm(0) != g_171 && !g_171.match(arg41.getSubterm(0)))
                                break Fail390;
                              IStrategoTerm arg42 = arg41.getSubterm(1);
                              if(arg42.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg42).getConstructor())
                                break Fail390;
                              i_171 = arg42.getSubterm(0);
                              term = termFactory.makeTuple(h_171, i_171);
                              term = add$S_0_0.instance.invoke(context, term);
                              if(term == null)
                                break Fail390;
                              j_171 = term;
                              term = q_198.instance.invoke(context, j_171, s_198);
                              if(term == null)
                                break Fail390;
                              term = termFactory.makeAppl(Normalise._consMul_2, new IStrategoTerm[]{g_171, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail390;
                              term = termFactory.makeAppl(Normalise._consAdd_2, new IStrategoTerm[]{f_171, term});
                              term = s_198.invoke(context, term);
                              if(term == null)
                                break Fail390;
                              if(true)
                                break Success337;
                            }
                            term = term18;
                          }
                          Success338:
                          { 
                            if(cons64 == Normalise._consDiv_2)
                            { 
                              Fail391:
                              { 
                                IStrategoTerm s_171 = null;
                                s_171 = term.getSubterm(0);
                                if(term.getSubterm(1) != s_171 && !s_171.match(term.getSubterm(1)))
                                  break Fail391;
                                term = Normalise.constInt1;
                                if(true)
                                  break Success338;
                              }
                              term = term18;
                            }
                            Success339:
                            { 
                              if(cons64 == Normalise._consDiv_2)
                              { 
                                Fail392:
                                { 
                                  IStrategoTerm t_171 = null;
                                  IStrategoTerm u_171 = null;
                                  IStrategoTerm arg43 = term.getSubterm(0);
                                  if(arg43.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg43).getConstructor())
                                    break Fail392;
                                  t_171 = arg43.getSubterm(0);
                                  IStrategoTerm arg44 = arg43.getSubterm(1);
                                  if(arg44.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg44).getConstructor())
                                    break Fail392;
                                  u_171 = arg44.getSubterm(0);
                                  if(term.getSubterm(1) != t_171 && !t_171.match(term.getSubterm(1)))
                                    break Fail392;
                                  term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{u_171});
                                  if(true)
                                    break Success339;
                                }
                                term = term18;
                              }
                              Success340:
                              { 
                                if(cons64 == Normalise._consDiv_2)
                                { 
                                  Fail393:
                                  { 
                                    IStrategoTerm v_171 = null;
                                    IStrategoTerm w_171 = null;
                                    v_171 = term.getSubterm(0);
                                    IStrategoTerm arg45 = term.getSubterm(1);
                                    if(arg45.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg45).getConstructor())
                                      break Fail393;
                                    if(arg45.getSubterm(0) != v_171 && !v_171.match(arg45.getSubterm(0)))
                                      break Fail393;
                                    IStrategoTerm arg46 = arg45.getSubterm(1);
                                    if(arg46.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg46).getConstructor())
                                      break Fail393;
                                    w_171 = arg46.getSubterm(0);
                                    term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{Normalise.constInt1, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{w_171})});
                                    term = s_198.invoke(context, term);
                                    if(term == null)
                                      break Fail393;
                                    if(true)
                                      break Success340;
                                  }
                                  term = term18;
                                }
                                Success341:
                                { 
                                  if(cons64 == Normalise._consDiv_2)
                                  { 
                                    Fail394:
                                    { 
                                      IStrategoTerm x_171 = null;
                                      IStrategoTerm y_171 = null;
                                      IStrategoTerm z_171 = null;
                                      IStrategoTerm arg47 = term.getSubterm(0);
                                      if(arg47.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg47).getConstructor())
                                        break Fail394;
                                      x_171 = arg47.getSubterm(0);
                                      IStrategoTerm arg48 = arg47.getSubterm(1);
                                      if(arg48.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg48).getConstructor())
                                        break Fail394;
                                      y_171 = arg48.getSubterm(0);
                                      IStrategoTerm arg49 = term.getSubterm(1);
                                      if(arg49.getTermType() != IStrategoTerm.APPL || Normalise._consMul_2 != ((IStrategoAppl)arg49).getConstructor())
                                        break Fail394;
                                      if(arg49.getSubterm(0) != x_171 && !x_171.match(arg49.getSubterm(0)))
                                        break Fail394;
                                      IStrategoTerm arg50 = arg49.getSubterm(1);
                                      if(arg50.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg50).getConstructor())
                                        break Fail394;
                                      z_171 = arg50.getSubterm(0);
                                      term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{y_171}), termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{z_171})});
                                      term = s_198.invoke(context, term);
                                      if(term == null)
                                        break Fail394;
                                      if(true)
                                        break Success341;
                                    }
                                    term = term18;
                                  }
                                  Success342:
                                  { 
                                    if(cons64 == Normalise._consDiv_2)
                                    { 
                                      Fail395:
                                      { 
                                        IStrategoTerm a_172 = null;
                                        IStrategoTerm b_172 = null;
                                        IStrategoTerm c_172 = null;
                                        IStrategoTerm arg51 = term.getSubterm(0);
                                        if(arg51.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg51).getConstructor())
                                          break Fail395;
                                        a_172 = arg51.getSubterm(0);
                                        IStrategoTerm arg52 = term.getSubterm(1);
                                        if(arg52.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg52).getConstructor())
                                          break Fail395;
                                        b_172 = arg52.getSubterm(0);
                                        term = termFactory.makeTuple(a_172, b_172);
                                        term = div$S_0_0.instance.invoke(context, term);
                                        if(term == null)
                                          break Fail395;
                                        c_172 = term;
                                        term = q_198.instance.invoke(context, c_172, s_198);
                                        if(term == null)
                                          break Fail395;
                                        term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                                        if(true)
                                          break Success342;
                                      }
                                      term = term18;
                                    }
                                    Success343:
                                    { 
                                      if(cons64 == Normalise._consDiv_2)
                                      { 
                                        Fail396:
                                        { 
                                          IStrategoTerm k_172 = null;
                                          IStrategoTerm l_172 = null;
                                          IStrategoTerm m_172 = null;
                                          IStrategoTerm p_172 = null;
                                          IStrategoTerm arg53 = term.getSubterm(0);
                                          if(arg53.getTermType() != IStrategoTerm.APPL || Normalise._consDiv_2 != ((IStrategoAppl)arg53).getConstructor())
                                            break Fail396;
                                          k_172 = arg53.getSubterm(0);
                                          IStrategoTerm arg54 = arg53.getSubterm(1);
                                          if(arg54.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg54).getConstructor())
                                            break Fail396;
                                          l_172 = arg54.getSubterm(0);
                                          IStrategoTerm arg55 = term.getSubterm(1);
                                          if(arg55.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg55).getConstructor())
                                            break Fail396;
                                          m_172 = arg55.getSubterm(0);
                                          term = termFactory.makeTuple(l_172, m_172);
                                          term = mul$S_0_0.instance.invoke(context, term);
                                          if(term == null)
                                            break Fail396;
                                          p_172 = term;
                                          term = q_198.instance.invoke(context, p_172, s_198);
                                          if(term == null)
                                            break Fail396;
                                          term = termFactory.makeAppl(Normalise._consDiv_2, new IStrategoTerm[]{k_172, termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term})});
                                          term = s_198.invoke(context, term);
                                          if(term == null)
                                            break Fail396;
                                          if(true)
                                            break Success343;
                                        }
                                        term = term18;
                                      }
                                      Success344:
                                      { 
                                        if(cons64 == Normalise._consMod_2)
                                        { 
                                          Fail397:
                                          { 
                                            IStrategoTerm u_172 = null;
                                            IStrategoTerm v_172 = null;
                                            IStrategoTerm w_172 = null;
                                            IStrategoTerm arg56 = term.getSubterm(0);
                                            if(arg56.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg56).getConstructor())
                                              break Fail397;
                                            u_172 = arg56.getSubterm(0);
                                            IStrategoTerm arg57 = term.getSubterm(1);
                                            if(arg57.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg57).getConstructor())
                                              break Fail397;
                                            v_172 = arg57.getSubterm(0);
                                            term = termFactory.makeTuple(u_172, v_172);
                                            term = mod$S_0_0.instance.invoke(context, term);
                                            if(term == null)
                                              break Fail397;
                                            w_172 = term;
                                            term = q_198.instance.invoke(context, w_172, s_198);
                                            if(term == null)
                                              break Fail397;
                                            term = termFactory.makeAppl(Normalise._consInt_1, new IStrategoTerm[]{term});
                                            if(true)
                                              break Success344;
                                          }
                                          term = term18;
                                        }
                                        Success345:
                                        { 
                                          if(cons64 == Normalise._consLt_2)
                                          { 
                                            Fail398:
                                            { 
                                              IStrategoTerm a_173 = null;
                                              IStrategoTerm b_173 = null;
                                              IStrategoTerm arg58 = term.getSubterm(0);
                                              if(arg58.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg58).getConstructor())
                                                break Fail398;
                                              a_173 = arg58.getSubterm(0);
                                              IStrategoTerm arg59 = term.getSubterm(1);
                                              if(arg59.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg59).getConstructor())
                                                break Fail398;
                                              b_173 = arg59.getSubterm(0);
                                              term = termFactory.makeTuple(a_173, b_173);
                                              term = compare_1_0.instance.invoke(context, term, lt$S_0_0.instance);
                                              if(term == null)
                                                break Fail398;
                                              term = q_198.instance.invoke(context, term, s_198);
                                              if(term == null)
                                                break Fail398;
                                              if(true)
                                                break Success345;
                                            }
                                            term = term18;
                                          }
                                          Success346:
                                          { 
                                            if(cons64 == Normalise._consGt_2)
                                            { 
                                              Fail399:
                                              { 
                                                IStrategoTerm c_173 = null;
                                                IStrategoTerm d_173 = null;
                                                IStrategoTerm arg60 = term.getSubterm(0);
                                                if(arg60.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg60).getConstructor())
                                                  break Fail399;
                                                c_173 = arg60.getSubterm(0);
                                                IStrategoTerm arg61 = term.getSubterm(1);
                                                if(arg61.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg61).getConstructor())
                                                  break Fail399;
                                                d_173 = arg61.getSubterm(0);
                                                term = termFactory.makeTuple(c_173, d_173);
                                                term = compare_1_0.instance.invoke(context, term, gt$S_0_0.instance);
                                                if(term == null)
                                                  break Fail399;
                                                term = q_198.instance.invoke(context, term, s_198);
                                                if(term == null)
                                                  break Fail399;
                                                if(true)
                                                  break Success346;
                                              }
                                              term = term18;
                                            }
                                            Success347:
                                            { 
                                              if(cons64 == Normalise._consLeq_2)
                                              { 
                                                Fail400:
                                                { 
                                                  IStrategoTerm e_173 = null;
                                                  IStrategoTerm f_173 = null;
                                                  IStrategoTerm arg62 = term.getSubterm(0);
                                                  if(arg62.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg62).getConstructor())
                                                    break Fail400;
                                                  e_173 = arg62.getSubterm(0);
                                                  IStrategoTerm arg63 = term.getSubterm(1);
                                                  if(arg63.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg63).getConstructor())
                                                    break Fail400;
                                                  f_173 = arg63.getSubterm(0);
                                                  term = termFactory.makeTuple(e_173, f_173);
                                                  term = compare_1_0.instance.invoke(context, term, leq$S_0_0.instance);
                                                  if(term == null)
                                                    break Fail400;
                                                  term = q_198.instance.invoke(context, term, s_198);
                                                  if(term == null)
                                                    break Fail400;
                                                  if(true)
                                                    break Success347;
                                                }
                                                term = term18;
                                              }
                                              Success348:
                                              { 
                                                if(cons64 == Normalise._consGeq_2)
                                                { 
                                                  Fail401:
                                                  { 
                                                    IStrategoTerm g_173 = null;
                                                    IStrategoTerm h_173 = null;
                                                    IStrategoTerm arg64 = term.getSubterm(0);
                                                    if(arg64.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg64).getConstructor())
                                                      break Fail401;
                                                    g_173 = arg64.getSubterm(0);
                                                    IStrategoTerm arg65 = term.getSubterm(1);
                                                    if(arg65.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg65).getConstructor())
                                                      break Fail401;
                                                    h_173 = arg65.getSubterm(0);
                                                    term = termFactory.makeTuple(g_173, h_173);
                                                    term = compare_1_0.instance.invoke(context, term, geq$S_0_0.instance);
                                                    if(term == null)
                                                      break Fail401;
                                                    term = q_198.instance.invoke(context, term, s_198);
                                                    if(term == null)
                                                      break Fail401;
                                                    if(true)
                                                      break Success348;
                                                  }
                                                  term = term18;
                                                }
                                                Success349:
                                                { 
                                                  if(cons64 == Normalise._consEqu_2)
                                                  { 
                                                    Fail402:
                                                    { 
                                                      IStrategoTerm i_173 = null;
                                                      IStrategoTerm j_173 = null;
                                                      IStrategoTerm arg66 = term.getSubterm(0);
                                                      if(arg66.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg66).getConstructor())
                                                        break Fail402;
                                                      i_173 = arg66.getSubterm(0);
                                                      IStrategoTerm arg67 = term.getSubterm(1);
                                                      if(arg67.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg67).getConstructor())
                                                        break Fail402;
                                                      j_173 = arg67.getSubterm(0);
                                                      term = termFactory.makeTuple(i_173, j_173);
                                                      term = compare_1_0.instance.invoke(context, term, eq_0_0.instance);
                                                      if(term == null)
                                                        break Fail402;
                                                      term = q_198.instance.invoke(context, term, s_198);
                                                      if(term == null)
                                                        break Fail402;
                                                      if(true)
                                                        break Success349;
                                                    }
                                                    term = term18;
                                                  }
                                                  Success350:
                                                  { 
                                                    if(cons64 == Normalise._consNeq_2)
                                                    { 
                                                      Fail403:
                                                      { 
                                                        IStrategoTerm k_173 = null;
                                                        IStrategoTerm p_173 = null;
                                                        IStrategoTerm arg68 = term.getSubterm(0);
                                                        if(arg68.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg68).getConstructor())
                                                          break Fail403;
                                                        k_173 = arg68.getSubterm(0);
                                                        IStrategoTerm arg69 = term.getSubterm(1);
                                                        if(arg69.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg69).getConstructor())
                                                          break Fail403;
                                                        p_173 = arg69.getSubterm(0);
                                                        term = termFactory.makeTuple(k_173, p_173);
                                                        term = compare_1_0.instance.invoke(context, term, lifted8.instance);
                                                        if(term == null)
                                                          break Fail403;
                                                        term = q_198.instance.invoke(context, term, s_198);
                                                        if(term == null)
                                                          break Fail403;
                                                        if(true)
                                                          break Success350;
                                                      }
                                                      term = term18;
                                                    }
                                                    Success351:
                                                    { 
                                                      if(cons64 == Normalise._consDiv_2)
                                                      { 
                                                        Fail404:
                                                        { 
                                                          IStrategoTerm q_173 = null;
                                                          q_173 = term.getSubterm(0);
                                                          IStrategoTerm arg70 = term.getSubterm(1);
                                                          if(arg70.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg70).getConstructor())
                                                            break Fail404;
                                                          IStrategoTerm arg71 = arg70.getSubterm(0);
                                                          if(arg71.getTermType() != IStrategoTerm.STRING || !"1".equals(((IStrategoString)arg71).stringValue()))
                                                            break Fail404;
                                                          term = q_173;
                                                          if(true)
                                                            break Success351;
                                                        }
                                                        term = term18;
                                                      }
                                                      Success352:
                                                      { 
                                                        if(cons64 == Normalise._consMul_2)
                                                        { 
                                                          Fail405:
                                                          { 
                                                            IStrategoTerm arg72 = term.getSubterm(1);
                                                            if(arg72.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg72).getConstructor())
                                                              break Fail405;
                                                            IStrategoTerm arg73 = arg72.getSubterm(0);
                                                            if(arg73.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg73).stringValue()))
                                                              break Fail405;
                                                            term = Normalise.constInt2;
                                                            if(true)
                                                              break Success352;
                                                          }
                                                          term = term18;
                                                        }
                                                        Success353:
                                                        { 
                                                          if(cons64 == Normalise._consMul_2)
                                                          { 
                                                            Fail406:
                                                            { 
                                                              IStrategoTerm arg74 = term.getSubterm(0);
                                                              if(arg74.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg74).getConstructor())
                                                                break Fail406;
                                                              IStrategoTerm arg75 = arg74.getSubterm(0);
                                                              if(arg75.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg75).stringValue()))
                                                                break Fail406;
                                                              term = Normalise.constInt2;
                                                              if(true)
                                                                break Success353;
                                                            }
                                                            term = term18;
                                                          }
                                                          Success354:
                                                          { 
                                                            if(cons64 == Normalise._consDiv_2)
                                                            { 
                                                              Fail407:
                                                              { 
                                                                IStrategoTerm arg76 = term.getSubterm(0);
                                                                if(arg76.getTermType() != IStrategoTerm.APPL || Normalise._consInt_1 != ((IStrategoAppl)arg76).getConstructor())
                                                                  break Fail407;
                                                                IStrategoTerm arg77 = arg76.getSubterm(0);
                                                                if(arg77.getTermType() != IStrategoTerm.STRING || !"0".equals(((IStrategoString)arg77).stringValue()))
                                                                  break Fail407;
                                                                term = Normalise.constInt2;
                                                                if(true)
                                                                  break Success354;
                                                              }
                                                              term = term18;
                                                            }
                                                            Success355:
                                                            { 
                                                              if(cons64 == Normalise._consOr_2)
                                                              { 
                                                                Fail408:
                                                                { 
                                                                  IStrategoTerm arg78 = term.getSubterm(0);
                                                                  if(arg78.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg78).getConstructor())
                                                                    break Fail408;
                                                                  term = Normalise.constTrue0;
                                                                  if(true)
                                                                    break Success355;
                                                                }
                                                                term = term18;
                                                              }
                                                              Success356:
                                                              { 
                                                                if(cons64 == Normalise._consOr_2)
                                                                { 
                                                                  Fail409:
                                                                  { 
                                                                    IStrategoTerm arg79 = term.getSubterm(1);
                                                                    if(arg79.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg79).getConstructor())
                                                                      break Fail409;
                                                                    term = Normalise.constTrue0;
                                                                    if(true)
                                                                      break Success356;
                                                                  }
                                                                  term = term18;
                                                                }
                                                                Success357:
                                                                { 
                                                                  if(cons64 == Normalise._consOr_2)
                                                                  { 
                                                                    Fail410:
                                                                    { 
                                                                      IStrategoTerm y_173 = null;
                                                                      y_173 = term.getSubterm(0);
                                                                      IStrategoTerm arg80 = term.getSubterm(1);
                                                                      if(arg80.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg80).getConstructor())
                                                                        break Fail410;
                                                                      term = y_173;
                                                                      if(true)
                                                                        break Success357;
                                                                    }
                                                                    term = term18;
                                                                  }
                                                                  Success358:
                                                                  { 
                                                                    if(cons64 == Normalise._consOr_2)
                                                                    { 
                                                                      Fail411:
                                                                      { 
                                                                        IStrategoTerm z_173 = null;
                                                                        IStrategoTerm arg81 = term.getSubterm(0);
                                                                        if(arg81.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg81).getConstructor())
                                                                          break Fail411;
                                                                        z_173 = term.getSubterm(1);
                                                                        term = z_173;
                                                                        if(true)
                                                                          break Success358;
                                                                      }
                                                                      term = term18;
                                                                    }
                                                                    Success359:
                                                                    { 
                                                                      if(cons64 == Normalise._consAnd_2)
                                                                      { 
                                                                        Fail412:
                                                                        { 
                                                                          IStrategoTerm b_174 = null;
                                                                          b_174 = term.getSubterm(0);
                                                                          IStrategoTerm arg82 = term.getSubterm(1);
                                                                          if(arg82.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg82).getConstructor())
                                                                            break Fail412;
                                                                          term = b_174;
                                                                          if(true)
                                                                            break Success359;
                                                                        }
                                                                        term = term18;
                                                                      }
                                                                      Success360:
                                                                      { 
                                                                        if(cons64 == Normalise._consAnd_2)
                                                                        { 
                                                                          Fail413:
                                                                          { 
                                                                            IStrategoTerm c_174 = null;
                                                                            IStrategoTerm arg83 = term.getSubterm(0);
                                                                            if(arg83.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg83).getConstructor())
                                                                              break Fail413;
                                                                            c_174 = term.getSubterm(1);
                                                                            term = c_174;
                                                                            if(true)
                                                                              break Success360;
                                                                          }
                                                                          term = term18;
                                                                        }
                                                                        Success361:
                                                                        { 
                                                                          if(cons64 == Normalise._consAnd_2)
                                                                          { 
                                                                            Fail414:
                                                                            { 
                                                                              IStrategoTerm arg84 = term.getSubterm(1);
                                                                              if(arg84.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg84).getConstructor())
                                                                                break Fail414;
                                                                              term = Normalise.constFalse0;
                                                                              if(true)
                                                                                break Success361;
                                                                            }
                                                                            term = term18;
                                                                          }
                                                                          Success362:
                                                                          { 
                                                                            if(cons64 == Normalise._consAnd_2)
                                                                            { 
                                                                              Fail415:
                                                                              { 
                                                                                IStrategoTerm arg85 = term.getSubterm(0);
                                                                                if(arg85.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg85).getConstructor())
                                                                                  break Fail415;
                                                                                term = Normalise.constFalse0;
                                                                                if(true)
                                                                                  break Success362;
                                                                              }
                                                                              term = term18;
                                                                            }
                                                                            Success363:
                                                                            { 
                                                                              if(cons64 == Normalise._consNot_1)
                                                                              { 
                                                                                Fail416:
                                                                                { 
                                                                                  IStrategoTerm arg86 = term.getSubterm(0);
                                                                                  if(arg86.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg86).getConstructor())
                                                                                    break Fail416;
                                                                                  term = Normalise.constFalse0;
                                                                                  if(true)
                                                                                    break Success363;
                                                                                }
                                                                                term = term18;
                                                                              }
                                                                              Success364:
                                                                              { 
                                                                                if(cons64 == Normalise._consNot_1)
                                                                                { 
                                                                                  Fail417:
                                                                                  { 
                                                                                    IStrategoTerm arg87 = term.getSubterm(0);
                                                                                    if(arg87.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg87).getConstructor())
                                                                                      break Fail417;
                                                                                    term = Normalise.constTrue0;
                                                                                    if(true)
                                                                                      break Success364;
                                                                                  }
                                                                                  term = term18;
                                                                                }
                                                                                Success365:
                                                                                { 
                                                                                  if(cons64 == Normalise._consNot_1)
                                                                                  { 
                                                                                    Fail418:
                                                                                    { 
                                                                                      IStrategoTerm f_174 = null;
                                                                                      IStrategoTerm arg88 = term.getSubterm(0);
                                                                                      if(arg88.getTermType() != IStrategoTerm.APPL || Normalise._consNot_1 != ((IStrategoAppl)arg88).getConstructor())
                                                                                        break Fail418;
                                                                                      f_174 = arg88.getSubterm(0);
                                                                                      term = f_174;
                                                                                      if(true)
                                                                                        break Success365;
                                                                                    }
                                                                                    term = term18;
                                                                                  }
                                                                                  Success366:
                                                                                  { 
                                                                                    if(cons64 == Normalise._consIfElseExp_3)
                                                                                    { 
                                                                                      Fail419:
                                                                                      { 
                                                                                        IStrategoTerm h_174 = null;
                                                                                        IStrategoTerm arg89 = term.getSubterm(0);
                                                                                        if(arg89.getTermType() != IStrategoTerm.APPL || Normalise._consFalse_0 != ((IStrategoAppl)arg89).getConstructor())
                                                                                          break Fail419;
                                                                                        h_174 = term.getSubterm(2);
                                                                                        term = h_174;
                                                                                        if(true)
                                                                                          break Success366;
                                                                                      }
                                                                                      term = term18;
                                                                                    }
                                                                                    if(cons64 == Normalise._consIfElseExp_3)
                                                                                    { 
                                                                                      IStrategoTerm j_174 = null;
                                                                                      IStrategoTerm arg90 = term.getSubterm(0);
                                                                                      if(arg90.getTermType() != IStrategoTerm.APPL || Normalise._consTrue_0 != ((IStrategoAppl)arg90).getConstructor())
                                                                                        break Fail381;
                                                                                      j_174 = term.getSubterm(1);
                                                                                      term = j_174;
                                                                                    }
                                                                                    else
                                                                                    { 
                                                                                      break Fail381;
                                                                                    }
                                                                                  }
                                                                                }
                                                                              }
                                                                            }
                                                                          }
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted8 extends Strategy 
  { 
    public static final lifted8 instance = new lifted8();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail420:
      { 
        IStrategoTerm term40 = term;
        Success367:
        { 
          Fail421:
          { 
            term = eq_0_0.instance.invoke(context, term);
            if(term == null)
              break Fail421;
            { 
              if(true)
                break Fail420;
              if(true)
                break Success367;
            }
          }
          term = term40;
        }
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class q_198 extends Strategy 
  { 
    public static final q_198 instance = new q_198();

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term, Strategy t_198)
    { 
      Fail422:
      { 
        lifted2 lifted20 = new lifted2();
        lifted20.t_198 = t_198;
        term = SRTS_all.instance.invoke(context, term, lifted20);
        if(term == null)
          break Fail422;
        term = t_198.invoke(context, term);
        if(term == null)
          break Fail422;
        if(true)
          return term;
      }
      return null;
    }
  }

  @SuppressWarnings("all") private static final class lifted2 extends Strategy 
  { 
    Strategy t_198;

    @Override public IStrategoTerm invoke(Context context, IStrategoTerm term)
    { 
      Fail423:
      { 
        term = q_198.instance.invoke(context, term, t_198);
        if(term == null)
          break Fail423;
        if(true)
          return term;
      }
      return null;
    }
  }

  public static void registerInterop(org.spoofax.interpreter.core.IContext context, Context compiledContext)
  { 
    new InteropRegisterer().registerLazy(context, compiledContext, InteropRegisterer.class.getClassLoader());
  }

  @SuppressWarnings("unused") public static class InteropRegisterer extends org.strategoxt.lang.InteropRegisterer 
  { 
    @Override public void register(org.spoofax.interpreter.core.IContext context, Context compiledContext)
    { 
      register(context, compiledContext, context.getVarScope());
    }

    @Override public void registerLazy(org.spoofax.interpreter.core.IContext context, Context compiledContext, ClassLoader classLoader)
    { 
      registerLazy(context, compiledContext, classLoader, context.getVarScope());
    }

    private void register(org.spoofax.interpreter.core.IContext context, Context compiledContext, org.spoofax.interpreter.core.VarScope varScope)
    { 
      compiledContext.registerComponent("Normalise");
      Normalise.init(compiledContext);
      varScope.addSVar("get_option_0_1", new InteropSDefT(get_option_0_1.instance, context));
      varScope.addSVar("debug_options_0_0", new InteropSDefT(debug_options_0_0.instance, context));
      varScope.addSVar("minstring_0_0", new InteropSDefT(minstring_0_0.instance, context));
      varScope.addSVar("maxstring_0_0", new InteropSDefT(maxstring_0_0.instance, context));
      varScope.addSVar("io_Normalise_0_0", new InteropSDefT(io_$Normalise_0_0.instance, context));
      varScope.addSVar("normalise_0_0", new InteropSDefT(normalise_0_0.instance, context));
      varScope.addSVar("canonical_0_0", new InteropSDefT(canonical_0_0.instance, context));
      varScope.addSVar("grouped_0_0", new InteropSDefT(grouped_0_0.instance, context));
      varScope.addSVar("g_202", new InteropSDefT(g_202.instance, context));
      varScope.addSVar("eliminate_mul_1_0_0", new InteropSDefT(eliminate_mul_1_0_0.instance, context));
      varScope.addSVar("first_mul_0_0", new InteropSDefT(first_mul_0_0.instance, context));
      varScope.addSVar("PushDownNot_0_0", new InteropSDefT($Push$Down$Not_0_0.instance, context));
      varScope.addSVar("Eliminate_0_0", new InteropSDefT($Eliminate_0_0.instance, context));
      varScope.addSVar("LeftGroup_0_0", new InteropSDefT($Left$Group_0_0.instance, context));
      varScope.addSVar("SortExpr_0_0", new InteropSDefT($Sort$Expr_0_0.instance, context));
      varScope.addSVar("NormaliseCompare_0_0", new InteropSDefT($Normalise$Compare_0_0.instance, context));
      varScope.addSVar("variable_name_reorder_0_0", new InteropSDefT(variable_name_reorder_0_0.instance, context));
      varScope.addSVar("SortTerms_0_0", new InteropSDefT($Sort$Terms_0_0.instance, context));
      varScope.addSVar("comparison_reorder_0_0", new InteropSDefT(comparison_reorder_0_0.instance, context));
      varScope.addSVar("comparison_reorder_code_0_0", new InteropSDefT(comparison_reorder_code_0_0.instance, context));
      varScope.addSVar("is_comparison_0_0", new InteropSDefT(is_comparison_0_0.instance, context));
      varScope.addSVar("SortCompare_0_0", new InteropSDefT($Sort$Compare_0_0.instance, context));
      varScope.addSVar("MergeCompare_0_0_fragment_0", new InteropSDefT($Merge$Compare_0_0_fragment_0.instance, context));
      varScope.addSVar("MergeCompare_0_0", new InteropSDefT($Merge$Compare_0_0.instance, context));
      varScope.addSVar("EvalExpr_0_0", new InteropSDefT($Eval$Expr_0_0.instance, context));
      varScope.addSVar("EvalNeg_0_0", new InteropSDefT($Eval$Neg_0_0.instance, context));
      varScope.addSVar("compare_1_0", new InteropSDefT(compare_1_0.instance, context));
      varScope.addSVar("EvalAdd0_0_0", new InteropSDefT($Eval$Add0_0_0.instance, context));
      varScope.addSVar("EvalKnownTrue_0_0", new InteropSDefT($Eval$Known$True_0_0.instance, context));
      varScope.addSVar("EvalKnownOther_0_0", new InteropSDefT($Eval$Known$Other_0_0.instance, context));
      varScope.addSVar("MulAbs_0_0", new InteropSDefT($Mul$Abs_0_0.instance, context));
      varScope.addSVar("SortMul_0_0", new InteropSDefT($Sort$Mul_0_0.instance, context));
      varScope.addSVar("CombineMul_0_0", new InteropSDefT($Combine$Mul_0_0.instance, context));
      varScope.addSVar("EliminateMul1_0_0", new InteropSDefT($Eliminate$Mul1_0_0.instance, context));
      varScope.addSVar("main_0_0", new InteropSDefT(main_0_0.instance, context));
    }

    private void registerLazy(org.spoofax.interpreter.core.IContext context, Context compiledContext, ClassLoader classLoader, org.spoofax.interpreter.core.VarScope varScope)
    { 
      compiledContext.registerComponent("Normalise");
      Normalise.init(compiledContext);
      varScope.addSVar("get_option_0_1", new InteropSDefT(classLoader, "Normalise$get_option_0_1", context));
      varScope.addSVar("debug_options_0_0", new InteropSDefT(classLoader, "Normalise$debug_options_0_0", context));
      varScope.addSVar("minstring_0_0", new InteropSDefT(classLoader, "Normalise$minstring_0_0", context));
      varScope.addSVar("maxstring_0_0", new InteropSDefT(classLoader, "Normalise$maxstring_0_0", context));
      varScope.addSVar("io_Normalise_0_0", new InteropSDefT(classLoader, "Normalise$io_$Normalise_0_0", context));
      varScope.addSVar("normalise_0_0", new InteropSDefT(classLoader, "Normalise$normalise_0_0", context));
      varScope.addSVar("canonical_0_0", new InteropSDefT(classLoader, "Normalise$canonical_0_0", context));
      varScope.addSVar("grouped_0_0", new InteropSDefT(classLoader, "Normalise$grouped_0_0", context));
      varScope.addSVar("g_202", new InteropSDefT(classLoader, "Normalise$g_202", context));
      varScope.addSVar("eliminate_mul_1_0_0", new InteropSDefT(classLoader, "Normalise$eliminate_mul_1_0_0", context));
      varScope.addSVar("first_mul_0_0", new InteropSDefT(classLoader, "Normalise$first_mul_0_0", context));
      varScope.addSVar("PushDownNot_0_0", new InteropSDefT(classLoader, "Normalise$$Push$Down$Not_0_0", context));
      varScope.addSVar("Eliminate_0_0", new InteropSDefT(classLoader, "Normalise$$Eliminate_0_0", context));
      varScope.addSVar("LeftGroup_0_0", new InteropSDefT(classLoader, "Normalise$$Left$Group_0_0", context));
      varScope.addSVar("SortExpr_0_0", new InteropSDefT(classLoader, "Normalise$$Sort$Expr_0_0", context));
      varScope.addSVar("NormaliseCompare_0_0", new InteropSDefT(classLoader, "Normalise$$Normalise$Compare_0_0", context));
      varScope.addSVar("variable_name_reorder_0_0", new InteropSDefT(classLoader, "Normalise$variable_name_reorder_0_0", context));
      varScope.addSVar("SortTerms_0_0", new InteropSDefT(classLoader, "Normalise$$Sort$Terms_0_0", context));
      varScope.addSVar("comparison_reorder_0_0", new InteropSDefT(classLoader, "Normalise$comparison_reorder_0_0", context));
      varScope.addSVar("comparison_reorder_code_0_0", new InteropSDefT(classLoader, "Normalise$comparison_reorder_code_0_0", context));
      varScope.addSVar("is_comparison_0_0", new InteropSDefT(classLoader, "Normalise$is_comparison_0_0", context));
      varScope.addSVar("SortCompare_0_0", new InteropSDefT(classLoader, "Normalise$$Sort$Compare_0_0", context));
      varScope.addSVar("MergeCompare_0_0_fragment_0", new InteropSDefT(classLoader, "Normalise$$Merge$Compare_0_0_fragment_0", context));
      varScope.addSVar("MergeCompare_0_0", new InteropSDefT(classLoader, "Normalise$$Merge$Compare_0_0", context));
      varScope.addSVar("EvalExpr_0_0", new InteropSDefT(classLoader, "Normalise$$Eval$Expr_0_0", context));
      varScope.addSVar("EvalNeg_0_0", new InteropSDefT(classLoader, "Normalise$$Eval$Neg_0_0", context));
      varScope.addSVar("compare_1_0", new InteropSDefT(classLoader, "Normalise$compare_1_0", context));
      varScope.addSVar("EvalAdd0_0_0", new InteropSDefT(classLoader, "Normalise$$Eval$Add0_0_0", context));
      varScope.addSVar("EvalKnownTrue_0_0", new InteropSDefT(classLoader, "Normalise$$Eval$Known$True_0_0", context));
      varScope.addSVar("EvalKnownOther_0_0", new InteropSDefT(classLoader, "Normalise$$Eval$Known$Other_0_0", context));
      varScope.addSVar("MulAbs_0_0", new InteropSDefT(classLoader, "Normalise$$Mul$Abs_0_0", context));
      varScope.addSVar("SortMul_0_0", new InteropSDefT(classLoader, "Normalise$$Sort$Mul_0_0", context));
      varScope.addSVar("CombineMul_0_0", new InteropSDefT(classLoader, "Normalise$$Combine$Mul_0_0", context));
      varScope.addSVar("EliminateMul1_0_0", new InteropSDefT(classLoader, "Normalise$$Eliminate$Mul1_0_0", context));
      varScope.addSVar("main_0_0", new InteropSDefT(classLoader, "Normalise$main_0_0", context));
    }
  }
}